3

Unitというタイプのエンティティのコレクション、タイプUnitPropのエンティティのコレクション、および次のように定義されたPropというタイプのエンティティのコレクション(簡略化) があります。

class Unit
{
    int ID;
    ICollection<UnitProp> UnitProps;
}

class UnitProp
{
    int ID;
    int UnitID;
    Unit Unit;
    int PropID;
    Prop Prop;
}

class Prop
{
    int ID;
    string Description; 
}

コレクションをクエリするために必要な of ( RequiredProps と呼ばれる)がListありますPropRequiredPropsで指定されたすべての s を持つという条件を満たす sのコレクションを返したいと考えています。UnitProp

私は次のようにクエリを書きました:

var result = ctx.Units
    .Where(x => RequiredProps.AsEnumerable()
        .Except(x.UnitProps.Select(y => y.Prop))
        .Count() == 0)
    .ToList();

もちろん、これは Entities への Linq であるため、クエリは例外をスローします: タイプ 'Prop' の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。

私もこれを試しました:

var result = ctx.Units
    .Where(x => RequiredProps.Select(y => y.ID)
        .Except(x.UnitProps
            .Select(y => y.Prop)
            .Select(y => y.ID))
        .Count() == 0)
    .ToList();

...しかし、同じ例外が発生しました。

提案?

4

1 に答える 1

2
var requiredIds = RequiredProps.Select(y => y.ID);

var result = ctx.Units
                .Where(m => !requiredIds
                    .Except(m.UnitProps.Select(x => x.Prop.ID)))
                    .Any())
                 .ToList();
于 2012-06-14T12:26:13.710 に答える