返回导航属性对象的子集
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();
唯一需要注意的是,如果您想将其反序列化为实体,则必须进行一些手动操作。
我有如下所述的一对多关系。在业务层的某些部分,存在对 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();
唯一需要注意的是,如果您想将其反序列化为实体,则必须进行一些手动操作。