LINQ Lambda在编写查询时命令

时间:2012-09-08 21:59:22

标签: linq

我有以下查询:

      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查询的顺序的一般规则。意思,。之前来过。选择等等。

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

3 个答案:

答案 0 :(得分:1)

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

更好的做法是给你的财产减少神秘的名字。此外,'fn'不遵循PascalCase的属性名称,如果它是一个字段,那么它可能不应该是公共的。

答案 1 :(得分:0)

他们应该处于的顺序完全取决于你正在做的事情的背景。因此,如果您的OrderBy只是简单地将数据格式化为友好的视图,请在修剪集合后将其放在最后,如果您查找已排序集合的First值,那么在集合迭代到之前您可能需要它得到第一个。

答案 2 :(得分:0)

你的订单可以很好。

让我们区分db指向具有非常好的LINQ提供程序的SQL DB并且case db是内存中对象的情况。我想这是第一次。

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

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