我们有一个名为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;
}
我们有一个List
of Prop
s(称为RequiredProps)我们需要用来查询集合。我们希望返回满足在RequiredProps中指定Unit
所有 s 的条件的 s集合。Prop
我这样写查询:
var result = ctx.Units
.Where(x => RequiredProps.AsEnumerable()
.Except(x.UnitProps.Select(y => y.Prop))
.Count() == 0)
.ToList();
当然,这是 Linq to Entities,所以查询会抛出异常: 无法创建“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();
...但它产生了同样的例外。
建议?