在集合中查找具有最大ID的商品

时间:2019-10-25 10:42:29

标签: c#

你好,我有一个加载数据并返回IEnumerable的方法。

我想获取用户列表,但要有谓词,即具有最大ID的用户。

我尝试过:

var id = users.Get().OrderByDescending(x => x.Id).First().Id;

需要花费一些时间,所以我想在方法中放入带where(id在所有列表中都是max)的谓词,那么我该怎么做?

1 个答案:

答案 0 :(得分:-1)

您的带有Get(...)参数的predicate可以用于过滤,但这对排序集合或获取Max值毫无用处。

您可以尝试仅获取Id值,并从中获取Max(decimal)

var maxId = users.Get().Max(x => x.Id);

这本来可以运行得更快,因为它不必重新排序所有内容,而只是跟踪最高值。而且即使它不能更快​​地运行,它也绝对更易于阅读。

请注意,如果Get()通过执行.ToList().ToArray()或通过读到DataReader的末尾或类似方法盲目地从数据库中下载所有记录,则速度带来的好处可能很小。

如果Get()不能预先读取所有内容,并且值来自数据库,则可以通过确保{的Id列上存在合适的数据库索引来优化速度{1}}表。

如果您要获取具有最高ID的用户,则可以对此进行跟进(使用您的users及其谓词):

Get()