我们有一组名为单位的实体, 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
Prop
个Unit
(称为 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}}
......但它产生了同样的例外。
建议?
答案 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();