相关疑难解决方法(0)

在Where子句之前的OrderBy子句 - 性能?

我试图了解在Where子句之前使用OrderBy子句是否有任何性能损失,如下所示:

List<string> names = new List<string> { //... };

var ns = names.OrderBy(n => n).Where(n => n.Length == 5);
Run Code Online (Sandbox Code Playgroud)

或者编译器会重新排列指令,以便在OrderBy子句之前执行Where子句吗?

c# linq

13
推荐指数
1
解决办法
1万
查看次数

为什么LINQ to objects方法的顺序很重要

我读了这个问题的答案,解释了LINQ to objects方法的顺序有所不同.我的问题是为什么?

如果我编写LINQ to SQL查询,那么LINQ方法的顺序无关紧要 - projections例如:

session.Query<Person>().OrderBy(x => x.Id)
                       .Where(x => x.Name == "gdoron")
                       .ToList();
Run Code Online (Sandbox Code Playgroud)

表达式树将转换为合理的SQL,如下所示:

  SELECT   * 
  FROM     Persons
  WHERE    Name = 'gdoron'
  ORDER BY Id; 
Run Code Online (Sandbox Code Playgroud)

当我运行查询时,无论方法的顺序多么奇怪,SQL查询都会根据表达式树构建.
为什么它不起作用LINQ to objects
当我枚举一个IQueryable时,所有的投影都可以放在一个合理的顺序中(例如,在Where之后的Order By)就像数据库优化器那样.

.net c# linq performance

10
推荐指数
2
解决办法
807
查看次数

Linq表现:我应该首先使用`where`或`select`

我的List记忆力很大,来自一个大约20岁的班级properties.

我想基于一个过滤此列表property,对于特定任务,我只需要一个列表property.所以我的查询是这样的:

data.Select(x => x.field).Where(x => x == "desired value").ToList()
Run Code Online (Sandbox Code Playgroud)

哪一个让我有更好的表现,Select先使用或使用Where

data.Where(x => x.field == "desired value").Select(x => x.field).ToList()
Run Code Online (Sandbox Code Playgroud)

如果这与data type我将数据保存在内存或字段类型中有关,请告诉我.请注意,我也需要这些对象用于其他任务,因此我无法在首先过滤它们并将它们加载到内存之前.

c# linq performance linq-to-entities query-performance

10
推荐指数
2
解决办法
6510
查看次数