我有这个linq代码:
db.Accounts.Where(o => o.name.Contains(prefixText.Trim())).Select(o => (o.name + ":" + o.account_id)).Take(5)
现在假设实际结果是 1000 ,但我只取得了前五名的结果。
我的问题是,所有 1000 结果(名称和ID)是否会首先被追加,然后取得前5个结果?
如果是,那么如何将其修改为仅追加前5个结果而不是整个查询结果?
答案 0 :(得分:0)
我对你的问题没有答案,但为了确保你没有连续所有1000条记录,你可以改为LINQ为
db.Accounts.Where(o => o.name.Contains(prefixText.Trim())).Take(5).
Select(o => (o.name + ":" + o.account_id)));
答案 1 :(得分:0)
当在数据库上完成时,当然,这将取决于数据库实现,尽管我认为数据库引擎最有可能首先选择它想要的记录(即,仅排在前5位),然后根据选择格式化它们。
当在内存中的集合(例如List<>)上执行此操作时,您可以放心,Select if if肯定只执行5次(最多)。
它基本上适用于“拉”模型:假设你最后有一个类似.ToList()
的东西来实际驱动它,ToList会询问Take()第一项,而Take询问选择,询问收集问题的地方。 where一直询问集合,直到它找到满足条件的集合,然后它传递Select
将Take
传递给ToList()
,Take
将其传递给Take
,然后ToList
{ {1}}为另一个,循环再次开始。在{{1}}返回第五个后,它会告诉{{1}},“好的,我们已经完成了。停止要求更多”。