gpt4 book ai didi

c# - 获取特定范围的列表项 (LINQ)

转载 作者:太空狗 更新时间:2023-10-29 22:03:19 25 4
gpt4 key购买 nike

我有正在使用的这段代码:

// get the collection of librarys from the injected repository
librarySearchResults = _librarySearchRepository.GetLibraries(searchTerm);

// map the collection into a collection of LibrarySearchResultsViewModel view models
libraryModel.LibrarySearchResults =
librarySearchResults.Select(
library =>
new LibrarySearchResultsViewModel
{
Name = library.Name,
Consortium = library.Consortium,
Distance = library.Distance,
NavigateUrl = _librarySearchRepository.GetUrlFromBranchId(library.BranchID),
BranchID = library.BranchID
}).ToList();

所有这一切都是获取 GetLibraries(searchTerm) 的结果,它返回 LibrarySearchResult 对象列表,并将它们映射到 LibrarySearchResultsViewModel 列表 的。

虽然这对于小结果集很有效,但一旦我达到 1,000 的结果集,它就会真正开始拖延,大约需要 12 秒才能完成转换。

我的问题:

由于我在此处使用分页,所以我实际上只需要显示大型结果集中返回的数据的一小部分。有没有办法利用 Take()GetRange() 之类的方法,以便仅对我需要显示的记录进行转换?假设在 1,000 条记录中,我只想获取第 20 到 40 条记录,并将它们转换为 View 模型。

我也非常愿意就改进或重构此代码提出任何建议。

最佳答案

使用SkipTake:

// take records from 20 to 40
var records = librarySearchResults.Skip(20).Take(20);

您可以轻松地对其进行分页(您需要 pagepageSize)。

另一方面,您在那里使用 ToList,请考虑使用 just IEnumerable,转换为列表会占用大量时间,特别是对于大数据集。

关于c# - 获取特定范围的列表项 (LINQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17864048/

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