仅当来自比较的可枚举的所有(非原始)值包含在目标可枚举中时,才返回结果的查询

时间:2012-06-14 12:19:02

标签: c# linq entity-framework entity-framework-4 linq-to-entities

我们有一组名为单位的实体, UnitProp 类型的实体集合以及名为支柱类型的实体的集合定义如下(简化):

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; 
}

我们需要List PropUnit(称为 RequiredProps )来查询集合。我们希望返回Prop的集合,这些集合满足 RequiredProps 中指定的所有var result = ctx.Units .Where(x => RequiredProps.AsEnumerable() .Except(x.UnitProps.Select(y => y.Prop)) .Count() == 0) .ToList(); 的条件。

我写了这样的查询:

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();

当然,这是Linq to Entities,因此查询将引发异常: 无法创建“Prop”类型的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。

我也试过这个:

{{1}}

......但它产生了同样的例外。

建议?

1 个答案:

答案 0 :(得分: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();