c# - C# 优化 Linq 查询:使用 where 更新
问题描述
我将如何优化以下查询?我们正在审查数据库中的实体框架查询,并尝试学习。
using (var context = new DataDbContext())
{
var query = (from u in content.Parents
where u.Children.Any(y = y.Age > 13)
select u);
foreach (var parent in query.ToList())
{
foreach (var children in owner.Children)
{
children.IsTeenager= true;
}
}
context.SaveChanges();
}
解决方案
没有很好的方法可以简化您在这里所做的事情。EF 倾向于将您推向从数据存储读取一堆数据、在本地更新实体然后将这些更改写回的路径。这显然很慢。但是,您在这里尝试做的是获取所有孩子并设置IsTeenager
属性,这样您甚至都不关心Parent
对象,您可以简单地这样做:
var children = context.Children.Where(c => c.Age < 13);
foreach(var child in children)
{
child.IsTeenager = true;
}
context.SaveChanges();
当然,使用原始 SQL 有更简单的方法。例如:
context.Database.ExecuteSqlCommand("UPDATE Children SET IsTeenager = 1 WHERE Age < 13");
推荐阅读
- python - How to extract tabular data from images?
- python - How to Set Every Attributes and Methods of Class Attribute to Become Class' Attributes and Methods?
- sql - 在运行时从审计表中删除
- flutter - 如何读取注释字段及其值(代码生成)
- hyperledger-fabric - 如何在调试模式下测试我的链码?
- hibernate - 在maven中添加hibernate-validator依赖项时如何修复'org.springframework.beans.factory.BeanCreationException'?
- php - 带有警报的 AJAX 提交功能不起作用
- javascript - 是否可以使用 JavaScript 更改元素的值
- javascript - Javascript 横幅上的缩放问题
- c++ - 为什么缓存阻塞更慢?