在列表中使用 LINQ
本文关键字:LINQ 列表 | 更新日期: 2023-09-27 18:34:50
我想使用 LINQ 在列表中查找一组数据对象。我目前正在迭代集合以找到我需要的东西。
我在网上搜索并阅读了很多例子,但我没有足够的意义来做我需要的。
我要搜索的数据对象在我的代码中称为"属性"。属性具有"属性"的泛型列表。属性具有字符串的泛型列表,该列表包含两个项目,即名称和值。
列表中的数据:
Property_Data
{
Attribute {name="Color" value=""}
Attribute {name="Size" value=""}
Attribute {name="Width" value=""}
Attribute {name="Display" value=""}
}
具有填充属性的属性示例
My_Property
Color = black
Size = 12
Width = 2
Display = True
这是我使用的代码,其中我迭代每个属性对象,然后迭代属性集合中的每个项目,搜索名称为"显示"且值为"True"的属性。
foreach (IPropertyData prop_data in Properties)
{
if (prop_data.Attributes.Find(a => a.Name == "Display").Value == "True")
{
// do something here
}
}
我想学习的是如何使用 LINQ 搜索属性数据对象的集合,这样我就不必迭代每个属性,然后迭代属性的属性。
这是我的尝试:
IEnumerable<IPropertyData> prop_datas = Properties
.Where(p => p.Attributes.Where(a => a.Name == "isDisplayable" && a.Value == "True");
if(prop_data.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True"))
{
// Do your work
}
如果您考虑完整收集,那么
Properties.ForEach(item=> {
if(item.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True"))
{
// Do your work.
}
});
问题更新后
IEnumerable<IPropertyData> prop_datas = Properties
.Where(p => p.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True"));
var query =
from prop_data in Properties
where prop_data.Attribute("IsDisplayable") == "True"
select prop_data;
查询变量现在应包含列表中其 IsDisplable 属性为"True"的所有内容。如果你想回顾你发现的每个元素,你可以简单地做一些类似的事情
foreach (var item in query)
{
// item.Attribute("IsDisplayable") = False;
}