Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ Min()获取对象?_C#_.net_Linq - Fatal编程技术网

C# 使用LINQ Min()获取对象?

C# 使用LINQ Min()获取对象?,c#,.net,linq,C#,.net,Linq,我有一个以.Min(mytable.Id)结尾的LINQ查询。这将返回一个整数。然后,我必须执行另一个查询以从该表中提取该对象。有没有一种不用写两个查询就可以做到这一点的方法 我可以将.Min()查询作为子查询,但这比两个单独的查询快吗 .OrderBy(m => m.Id).FirstOrDefault(); 应该在没有任何附加依赖项的情况下完成 由于延迟,这将非常快。使用OrderBy子句,然后获取第一项。您是否可以共享查询的其余部分,以查看是否存在优化机会?另外,请告诉我们,如果这

我有一个以.Min(mytable.Id)结尾的LINQ查询。这将返回一个整数。然后,我必须执行另一个查询以从该表中提取该对象。有没有一种不用写两个查询就可以做到这一点的方法

我可以将.Min()查询作为子查询,但这比两个单独的查询快吗

.OrderBy(m => m.Id).FirstOrDefault();
应该在没有任何附加依赖项的情况下完成


由于延迟,这将非常快。

使用
OrderBy
子句,然后获取第一项。

您是否可以共享查询的其余部分,以查看是否存在优化机会?另外,请告诉我们,如果这是内存中的查询,或者它运行在外部数据存储(LINQ2SQL、EF等)上,那么它的效率很低(
O(n log n)
),您不需要对集合进行排序来获取最小值。。。它可以在
O(n)
中使用MinBy(参见我的答案)这样的方法完成,它不会对集合进行完全排序
OrderBy
是延迟的。延迟的意思是,它在请求第一项之前不会开始排序,但一旦它开始对集合排序,它将对其进行完全排序(这就是.NET实现所做的;在这方面更好,因为它将在排序完成之前开始生成项)@Thomaslevsque它也被延迟,因为它在最后一次调用之前不会被查询提供者处理。提到表的OP表示它可能是EF或Linq2SQL,在这种情况下,它将转换为等价的
按id从表顺序中选择top 1*
,这反过来将由数据库根据索引以不同的方式实现,但也可能是O(n log n)、O(n)或O(1),具体取决于各种情况。在任何情况下,MinBy都是O(n),但是在它检索到每一行之后,因此效率要低得多。