C# 在实体框架中编写查询的最佳方式是什么

C# 在实体框架中编写查询的最佳方式是什么,c#,linq,entity-framework,C#,Linq,Entity Framework,编写查询性能方面的最佳方法是什么。e、 我可以写查询来获得所有员工的具体姓氏,如下所示 ObjectQuery<Employee> queryEmp = context.CreateQuery<Employee>( "Select value e from Employees AS e Where e.LastName = @lastName", new ObjectParameter("lastName", typeof(String)) { V

编写查询性能方面的最佳方法是什么。e、 我可以写查询来获得所有员工的具体姓氏,如下所示

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);

我的问题是哪种查询方法最好。 我感到困惑的是,我认为(但不确定)使用后三种方法(第一种方法除外)将从数据库中获取员工的所有记录,然后通过枚举所有满足指定where条件的将被检索的记录,所以我认为最后三种方法比第一种要花更多的时间,所以我只使用了第一种。 但实际上我不知道最好的是什么。
所有方法是否只从数据库中获取满足WAR条件的记录,还是从数据库中获取所有记录,然后在应用结束时枚举以返回过滤后的记录?

差异不大;第二个/3个表达式的优点是在编译时强制执行类型正确性,因为如果
LastName
不存在或(比如)是
int
,表达式树将不会编译,从而避免了打字错误和“魔术字符串”的问题

你想把一切都带回来;否。第二次/第三次编译为表达式树,可以对其进行反构造并用于创建正确的SQL(在服务器上执行筛选)。非常聪明,但经常被误解。关键是这是
可查询的。Where
(采用
表达式
),而不是
可枚举的。Where
(采用
Func
)。请随意执行跟踪

同样,第1个/4个之间的差别也很小-两者都将在服务器上进行过滤

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" });