gpt4 book ai didi

c# - LINQ 方法的序列有什么重要性吗?

转载 作者:可可西里 更新时间:2023-11-01 08:40:01 26 4
gpt4 key购买 nike

只是想知道,添加 LINQ 方法的顺序是否重要?

例如。

using(MyDataContext context = new MyDataContext())
{
var user = context.Users
.Where(u => u.UserName.StartsWith("t"))
.OrderByDescending(u => u.CreatedDate)
.FirstOrDefault();
}

和这个完全一样吗?

using(MyDataContext context = new MyDataContext())
{
var user = context.Users
.OrderByDescending(u => u.CreatedDate)
.Where(u => u.UserName.StartsWith("t"))
.FirstOrDefault();
}

当然,我可以让所有方法一一测试,但我想对逻辑有一些大概的了解。

所以:

  • 除了 FirstOrDefault()、ToList() 等方法和其他真正触发执行的方法之外,在 LINQ 语句中使用某种顺序是否重要?

再次感谢!

最佳答案

在 LINQ to SQL 中,我希望这两个查询是相同的 - 它们应该以相同的查询计划结束,至少,即使不是完全相同的 SQL。

在 LINQ to Objects 中,它们的行为会非常不同。假设您有一百万用户,但其中只有两个用户的用户名以“t”开头。在第一种形式中,您将过滤然后对这两个用户进行排序...在第二种形式中,它需要在开始过滤之前对所有内容进行排序。

当然,在其他情况下,顺序也很重要 - 特别是,如果您有一个 Select 到一半,然后是一个 Where 子句,那么您将过滤不同的东西。想象一下:

var query = Enumerable.Range(-20, 30)
.Select(x => -x)
.Where(x => x > 5);

对比

var query = Enumerable.Range(-20, 30)
.Where(x => x > 5)
.Select(x => -x);

在第一个示例中,结果将为“20、19、18、... 6”,而在第二个查询中,结果将为“-6、-7、-8、-9、-10”。完全不同!

关于c# - LINQ 方法的序列有什么重要性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4458743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com