[英]What is the best way to write queries in Entity Framework
什么是明智地编写查询性能的最佳方法。 例如,我可以编写查询以获得具体姓氏的所有雇员,如下所示
ObjectQuery<Employee> queryEmp =
context.CreateQuery<Employee>(
"Select value e from Employees AS e Where e.LastName = @lastName",
new ObjectParameter("lastName", typeof(String)) { Value = "Farooqi" });
ObjectResult<Employee> results = query.Execute(MergeOption.AppendOnly);
要么
var v = from e in context.Employees where e.LastName == "Farooqi" select e;
要么
context.Employees.Where(e => e.LastName == "Farooqi");
要么
context.Employees.Where("LastName = @lastName", new ObjectParameter("lastName", typeof(String)) { Value = "Farooqi" });
我的问题是,哪种查询方法最好。 我感到困惑的是,我认为(但不确定)使用除了第一个方法之外的最后三个方法将从数据库中获取员工的所有记录,然后通过枚举将被回收的所有记录来满足指定的where条件,所以我认为最后三种方式比第一种方式花费更多时间,所以我只使用第一种方式。 但实际上最好的是什么我不知道。 是否所有方法只获取记录表格数据库,该数据库满足条件或从db获取所有记录,然后在应用程序结束时枚举返回过滤后的记录?
差别不大; 第二个/第三个具有在编译时强制类型正确性的优点,因为如果LastName
不存在或者(比如说)一个int
,表达式树将不会编译 - 避免拼写错误和“魔术字符串”的问题。
重新考虑把所有东西带回来; 没有。 第二个/第三个编译到表达式树 ,可以解构并用于创建正确的SQL(在服务器上执行过滤器)。 非常聪明,但经常被误解。 关键点在于这是Queryable.Where
(采用Expression<Func<T, bool>>
),而不是Enumerable.Where
(采用Func<T, bool>
)。 随意执行跟踪。
同样,第1个/第4个之间几乎没有差别 - 两者都将在服务器上进行过滤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.