实体框架关系 - 首选客户地址

时间:2017-12-05 20:52:56

标签: c# entity-framework linq

假设一个客户可以有多个地址,但只有一个" 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;

1 个答案:

答案 0 :(得分:0)

你不能。这不可能。因为您正在使用Linq实体,并且这些Linq语句正在转换为SQL查询。因此,PreferredAddress属性没有SQL等效项。因此,该语句无法转换为SQL查询。

那么,为什么不尝试这样做呢?

_context.Order.Where(x => x.Id == 20).Select(x => x.Person.Addresses.FirstOrDefault(x => x.Preferred));