我有如下所述的一对多关系。在业务层的某些部分中,存在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数组创建匿名投影?
答案 0 :(得分:0)
将您想要的Item属性(无论是简单类型还是复杂类型)以及客户端名称投射为匿名类型并将其序列化。
myitems = dbContextScopeX.Items.Include(x => x.Client)
.Select(i=>new {
ItemProp = i.ItemProp,
ItemCollection = i.ItemCollection,
...
ClientName = i.Client.Name
}).ToList();
如果您想要将其反序列化为实体,那么您必须做一些手动工作。