gpt4 book ai didi

c# - 如何避免 linq 查询 C# 中的两个嵌入式循环

转载 作者:行者123 更新时间:2023-11-30 20:15:23 25 4
gpt4 key购买 nike

var listOfIds = new List<string>(); 
var allItems = IEnumerable<Info>();

foreach (var id in collectionIds)
{
listOfIds.AddRange(allItems
.Where(p => p.Data.FirstOrDefault(m => m.Key == "myId").Value == id)
.Select(x => x.Id));
}

我想避免使用 AddRange 但在这种情况下只使用 Add 并且可能只在要避免的地方使用 FirstOrDefault最后一个 Select 案例。

这可能吗?如果可能的话如何?

最佳答案

假设您的原始代码为您提供了正确的数据,特别是您可以:

  1. 只关心 p.Data 中的第一个项包含一个匹配值;
  2. p.Data 将始终包含至少一个元素。

然后这段代码会给你相同的输出:

var listOfIds = allItems
.Where(p => collectionIds.Contains(p.Data.First(m => m.Key == "myId").Value))
.ToList();

但是,如果您真的关心 p.Data 中的任何值是否匹配,那么这会更合适:

var listOfIds = allItems
.Where(p => p.Data.Any(m => m.Key == "myId" &&
collectionIds.Contains(m.Value)))
.ToList();

关于c# - 如何避免 linq 查询 C# 中的两个嵌入式循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55105805/

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