你好,我有一个加载数据并返回IEnumerable的方法。
我想获取用户列表,但要有谓词,即具有最大ID的用户。
我尝试过:
var id = users.Get().OrderByDescending(x => x.Id).First().Id;
需要花费一些时间,所以我想在方法中放入带where(id在所有列表中都是max)的谓词,那么我该怎么做?
答案 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()