我有类似这样的类结构:
class MyClass
{
public IEnumerable<AttributeGroup> AttributeGroups { get; set; }
}
class AttributeGroup
{
public IEnumerable<Attribute> Attributes { get; set; }
}
class Attribute
{
public string SomeProp { get; set; }
}
我需要获得具有特定“SomeProp”值的所有“属性”,无论它们属于哪个属性组。
例如,SomeProperty== 'A'
和MyClassObj.AttributeGroup[0]
都可以找到MyClassObj.AttributeGroup[5]
,我需要编写一个Linq(或类似的东西)来从这两个不同的属性组中获取两个对象。
有什么建议吗?
答案 0 :(得分:22)
首先从所有属性组中选择所有属性,然后仅选择具有属性的属性。
IEnumerable<Attribute> attributes =
myClassInstance
.AttributeGroups
.SelectMany(x => x.Attributes)
.Where(x => x.SomeProperty == 'A');
其他Linq风格的语法:
IEnumerable<Attribute> attributes =
from attributeGroup in myClassInstance.AttributeGroups
from attribute in attributeGroup.Attributes
where attribute.SomeProperty == 'A'
select attribute;
答案 1 :(得分:3)
查看SelectMany(http://msdn.microsoft.com/en-us/library/bb534336.aspx)。
例如:
myClassObjs.SelectMany(o => o.AttributeGroups.SelectMany(g => g.Attributes)).Where(a => a.SomeProp == "A")
此行选择SomeProp等于“A”的所有MyClass对象的所有AttributeGroup的所有Attribute对象。 a表示Where属于Attribute的lambda表达式。
答案 2 :(得分:0)
你的榜样不明确;我无法分辨你的意思,“来自这两个不同属性组的两个对象”。我猜你想要那些具有属性的组有问题:
from g in MyClassObj.AttributeGroups
where g.Any(attr => attr.SomeProperty == "A")
select g