gpt4 book ai didi

c# - 以 LINQ 方式返回最大数量的项目

转载 作者:太空狗 更新时间:2023-10-30 00:25:22 24 4
gpt4 key购买 nike

假设我有一个带有底层数据存储库的搜索模块,并且需要从搜索查询中返回最多 25 个结果。我可以通过 Take() 操作强制执行此操作:

IEnumerable<Contact> Search(string name)
{
// validation/cleanup on name parameter

IEnumerable<Contact> matching = _repository.Search(name);
return matching.Take(25);
}

接下来,假设我有一个额外的要求,如果返回超过 25 个结果(即搜索参数太宽泛)则抛出异常。有没有一种直接的方法可以用 LINQ 做到这一点?到目前为止我最接近的是比最大数量多一个并使用它:

IEnumerable<Contact> Search(string name)
{
// validation/cleanup on name parameter

var matching = _repository.Search(name);
var toReturn = matching.Take(26).ToList();
if (toReturn.Count() > 25)
{
throw new Exception("Too many results");
}

return toReturn;
}

但是,这似乎有点笨拙。

最佳答案

您的方法是最好的方法。我根本不会做任何改变。

任何其他选项,例如首先单独查询计数,如果您的项目少于 26 个,则执行两次看似昂贵的操作(进行实际搜索)。您在错误情况下只会节省一点点,而在常见情况下会增加大量费用。

唯一一次您的代码不太理想的情况是,如果 _repository.Search(name) 返回的类型可以廉价地迭代两次并且可以廉价地提供它的计数(例如,List) 但在上下文中似乎并非如此。

关于c# - 以 LINQ 方式返回最大数量的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com