gpt4 book ai didi

c# - 使用linq按子集合的属性进行过滤

转载 作者:行者123 更新时间:2023-12-02 04:33:08 24 4
gpt4 key购买 nike

class Store
{
public int ID { get; set; }
public List<AnnualData> annualData { get; set; }
}

class AnnualData
{
public int Year { get; set; }
public Dictionary<string, double> Data { get; set; }
}

我需要获取请求的商店和请求的年份数据。我可以轻松过滤商店:

List<int> storeIDs = new List<int> {12, 13, 14};
List<Store> stores = allData.Stores.Where(s => storeIDs.Contains(s.ID)).ToList();

但我不知道如何按年份列表进一步过滤。

List<int> years = new List<int> {2012, 2013, 2014};
stores = allData.Stores.Where(s => storeIDs.Contains(s.ID)).?????

尝试过任何/全部/包含,但我显然对 Linq 的理解不够好。提前致谢。

根据 Selmann 和 Timothy 提出的解决方案进行更新使用您的示例,我仍然在输出中看到商店 1 的所有 3 年 - 我只想在这种情况下看到 2007 年:

   static void Main(string[] args)
{
List<Store> allData = new List<Store> {
new Store { ID = 1,
annualData = new List<AnnualData> {
new AnnualData {
Year = 2006,
Data = new Dictionary<string, double>{{"Value2006", 1.0}}
},
new AnnualData {
Year = 2007,
Data = new Dictionary<string, double>{{"Value2007", 1.1}}
},
new AnnualData {
Year = 2008,
Data = new Dictionary<string, double>{{"Value2008", 1.2}}
}
}
}
};

List<int> storeIDs = new List<int> { 1 };
List<int> years = new List<int> { 2007 };

var stores = allData.Where(s => storeIDs.Contains(s.ID) &&
s.annualData.Any(x => years.Contains(x.Year)));

foreach (Store s in stores)
foreach (AnnualData a in s.annualData)
Console.WriteLine(a.Year);

}

最佳答案

您可以使用任何方法:

stores = allData.Stores.Where(s => storeIDs.Contains(s.ID) && 
s.annualData.Any(x => years.Contains(x.Year)));

关于c# - 使用linq按子集合的属性进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22596146/

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