返回导航属性对象的子集

时间:2015-03-23 15:38:41

标签: entity-framework entity entity-framework-6

我有如下所述的一对多关系。在业务层的某些部分中,存在Item表的查询,而在其他部分中存在Client表(以及其Items)。 LazyLoading和ProxyCreation都是false,引用循环处理设置为ignore。

public class Client {
 public virtual ICollection<Item> Items { get; set; }   
 public string Name {get;set;}
}

public class Item {
  public virtual Client TheClient {get;set;}
  public string ItemProp {get;set;}
  // another 10 properties or so
}

 myitems = dbContextScopeX.Items.Include(x => x.Client).ToList();

该视图有一个项目列表,需要显示客户端的名称(在我的示例中)。我正在寻找item.Client.Name终极,但是当myitems获得查询/序列化时,它包含:

myitems.Client.Items

如果我在Client的Item属性上设置属性[JsonIgnore],它永远不会通过我在其他地方需要它的图形。有没有办法获取myItems.Client.Name而无需在查询中获取myitems.Client.Items或者无需为Item数组创建匿名投影?

1 个答案:

答案 0 :(得分:0)

将您想要的Item属性(无论是简单类型还是复杂类型)以及客户端名称投射为匿名类型并将其序列化。

myitems = dbContextScopeX.Items.Include(x => x.Client)
    .Select(i=>new {
        ItemProp = i.ItemProp,
        ItemCollection = i.ItemCollection,
        ...
        ClientName = i.Client.Name
    }).ToList();

如果您想要将其反序列化为实体,那么您必须做一些手动工作。