2

我有以下查询:

      var query = db.Prog
       .Where (a => a.Prog != "00000" && a.fn != "Koll")
       .Select(a => new  {a.Prog, a.MEfn})
       .OrderByDescending(a => a.MEfn)

该查询工作正常,但想知道您编写 Lambda linq 查询的顺序是否有一般规则。含义,.Where 出现在 .Select 之前,等等。

有人可以告诉我需要编写 LINQ 的顺序或最佳实践。

4

3 回答 3

1

你的订单可能很好。

让我们区分 db 指向具有非常好的 LINQ 提供程序的 SQL DB 的情况,以及 db 是内存中对象的情况。估计是第一个

如果您使用 LINQ to SQL 提供程序,则仅当您将查询具体化为对象时才会评估语句,因此 SQL 优化器(在 DB 内部)将负责语句的排序。

当您的语句针对内存中的集合或来自 LINQ to SQL 的具体化集合运行时,反之亦然。在这种情况下,它们是按顺序执行的,因此您希望首先执行那些减少集合中结果数量的语句。Where是最佳人选!!!

于 2012-09-08T22:08:15.453 回答
1

编写 LINQ 查询的顺序没有最佳实践,这取决于您是要先进行过滤还是要进行投影。例如,在您的情况下,您将投影到不包含过滤器使用的“fn”属性的匿名类型,因此如果您的选择是第一个,它将无法在 where 子句中使用。

更好的做法是为您的属性提供不那么神秘的名称。此外,'fn' 不遵循属性名称的 PascalCase,如果它是一个字段,那么它可能不应该是公共的。

于 2012-09-08T22:09:53.957 回答
0

它们应该处于的顺序完全取决于您正在执行的操作的上下文。因此,如果您的 OrderBy 只是将数据格式化为便于查看,请在修剪集合后将其放在末尾,如果您正在寻找已排序集合的 First 值,那么您可能需要在集合迭代之前使用它获得第一。

于 2012-09-08T22:07:16.593 回答