gpt4 book ai didi

c# - 筛选对象列表,其中嵌套集合与数组匹配

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:54 26 4
gpt4 key购买 nike

我有一个对象列表(items),我想根据嵌套集合的值(Features in object GenericItem 进行过滤>).作为过滤器的基础,我有一个 int 数组 (filter)。我的目标是找到 items 中的所有对象,其中 Features 集合包含 至少所有值 filter 数组.

根据 Stackoverflow 上提供给其他人的许多解决方案,我编写了以下内容。我遇到的问题是,在我的 Linq 查询(以及我尝试过的许多变体)中,我总是最终得到 items 中的所有对象,其中所有 Features 都包含在 过滤器。我知道我的 lambda 表达式“顺序错误”,但是因为我想以 GenericItem 列表结束,所以我似乎无法弄清楚如何编写我的表达式。

我应该如何编写 Linq 表达式以获得预期的结果?

所以在下面,当我过滤 [2, 3] 数组时,我的目标是获得包含“Item A”和“Item B”的result (两者都至少具有特征 2 和 3)。相反,我得到了“Item B”和“Item C”的result,因为它们的Features all 都包含在filter 数组。

public class GenericItem {
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Feature> Features { get; set; }
}

public class Feature {
public int Id { get; set; }
}

static void Main (string[] args) {

var items = new List<GenericItem>();
items.Add(new GenericItem() {
Id = 1,
Name = "Item A",
Features = new Collection<Feature>() {
new Feature() {Id = 1},
new Feature() {Id = 2},
new Feature() {Id = 3}
}
});
items.Add(new GenericItem() {
Id = 2,
Name = "Item B",
Features = new Collection<Feature>() {
new Feature() {Id = 2},
new Feature() {Id = 3}
}
});
items.Add(new GenericItem() {
Id = 3,
Name = "Item C",
Features = new Collection<Feature>() {
new Feature() {Id = 3}
}
});

int[] filter = new int[] {2, 3};

var resultAll = items.Where(i => i.Features.All(f => filter.Contains(f.Id)));

foreach (GenericItem I in resultAll)
System.Console.WriteLine(I.Name);
}

最佳答案

All 应用到 filter 集合而不是 i.Features:

var resultAll = items.Where(i => filter.All(x => i.Features.Any(f => x == f.Id)));

关于c# - 筛选对象列表,其中嵌套集合与数组匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436405/

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