linq查询将特定列数附加到字符串中

时间:2014-11-20 07:12:22

标签: c# asp.net string linq append

我有这个linq代码:

db.Accounts.Where(o => o.name.Contains(prefixText.Trim())).Select(o => (o.name + ":" + o.account_id)).Take(5)

现在假设实际结果是 1000 ,但我只取得了前五名的结果。

我的问题是,所有 1000 结果(名称和ID)是否会首先被追加,然后取得前5个结果?

如果是,那么如何将其修改为仅追加前5个结果而不是整个查询结果?

2 个答案:

答案 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一直询问集合,直到它找到满足条件的集合,然后它传递SelectTake传递给ToList()Take将其传递给Take,然后ToList { {1}}为另一个,循环再次开始。在{{1}}返回第五个后,它会告诉{{1}},“好的,我们已经完成了。停止要求更多”。