假设一个客户可以有多个地址,但只有一个" Preferred"地址。我怎样才能使模型类的属性只保留首选地址,并通过另一个对象使用lambda表达式,例如Order?
我的模型类看起来像这样:
public class Cusotmer
{
public virtual int Id {get; set;}
public virtual HashSet<Address> Addresses {get; set;}
public virtual Address PreferredAddress => Addresses.FirstOrDefault(x => x.Preferred)
}
public class Order
{
public virtual int Id {get; set;}
public virtual Customer Customer {get; set;}
}
我希望这可以工作:
_context.Order.Where(x => x.Id == 20).Select(x => x.Person.PreferredAddress);
但是我收到错误说:
&#34;指定的类型成员&#39; PreferredAddress&#39; LINQ不支持 到实体。仅初始化程序,实体成员和实体导航 支持属性。&#34;
答案 0 :(得分:0)
你不能。这不可能。因为您正在使用Linq实体,并且这些Linq语句正在转换为SQL查询。因此,PreferredAddress
属性没有SQL等效项。因此,该语句无法转换为SQL查询。
那么,为什么不尝试这样做呢?
_context.Order.Where(x => x.Id == 20).Select(x => x.Person.Addresses.FirstOrDefault(x => x.Preferred));