9

私は次のようなクラス構造を持っています:

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'見つけることができ、これら 2 つの異なる属性グループから 2 つのオブジェクトを取得するには、Linq (またはそのようなもの) を作成する必要があります。MyClassObj.AttributeGroup[0]MyClassObj.AttributeGroup[5]

なにか提案を?

4

3 に答える 3

25

最初にすべての属性グループからすべての属性を選択し、次にプロパティを持つ属性のみを選択します。

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;
于 2013-03-06T10:40:57.440 に答える
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 オブジェクトのすべての AttributeGroups のすべての Attribute オブジェクトを選択します。Where のラムダ式の a は Attribute 型です。

于 2013-03-06T10:51:26.497 に答える
0

あなたの例は明確ではありません。「これらの 2 つの異なる属性グループからの 2 つのオブジェクト」という意味がわかりません。問題のプロパティを持つ属性を持つグループが必要だと思います。

from g in MyClassObj.AttributeGroups
where g.Any(attr => attr.SomeProperty == "A")
select g
于 2013-03-06T10:42:29.263 に答える