返回导航属性对象的子集

Returning a subset of a navigation propertie's object

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

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 得到 queries/serialized 时,它包含:

myitems.Client.Items

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

将您想要的 Item 属性(无论是简单类型还是复杂类型)连同 Client 名称一起投影到匿名类型中并将其序列化。

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

唯一需要注意的是,如果您想将其反序列化为实体,则必须进行一些手动操作。