【发布时间】:2017-11-20 17:22:39
【问题描述】:
我设法从对象的复杂结构中做出选择,但只有在 foreach 的帮助下,我怎样才能避免这种 foreach 并解决我的问题,只使用 LINQ?
var product = new List<ProductCrp>
{
new ProductCrp {
Strucutre = new StructureItem() {
CheckList = new CheckList() {
Checks = new List<Check>
{
new Check { NumberAsInt = "149" },
new Check { NumberAsInt = "260" },
new Check { NumberAsInt = null }
}
}
}
},
new ProductCrp {
Strucutre = new StructureItem() {
CheckList = new CheckList() {
Checks = new List<Check>
{
new Check { NumberAsInt = "261" },
new Check { NumberAsInt = "150" },
new Check { NumberAsInt = "260" }
}
}
}
}
};
string[] numbers = { "149" };
LINQ:
foreach (var item in product)
{
item.Strucutre.CheckList.Checks = item.Strucutre.CheckList.Checks.Where(w => numbers.Contains(w.NumberAsInt)).Select(w => w);
}
【问题讨论】:
-
这里的问题是您不是在进行选择,而是在更新实际项目。这是你想要的吗?你真的想要一个克隆的项目集合,
Checks设置你想要的方式吗? -
那么,你想达到什么样的结果?
-
您是否正在寻找一种方法来选择具有 Checks 数组中“数字”值之一的 ProductCrp 对象?因为如果您试图获取顶级对象,您可以只做一个 where 并在您传入的 lambda 中向下钻取。(假设这是对象的 linq)。如果这是 linq to SQL,这里还有很多考虑因素。
-
Structure拼写不一致是否有原因? -
你能描述一下为什么你在最后附加了琐碎的
Select吗?这不是总是错误的做法,但它有点奇怪。那是怎么回事?