[英]Retrieving list of objects with data plus count of rows in join
我在 ASP.NET MVC 项目 EF 6 中有一个 EF 查询。为了形成我的数据,我有 2 个连接,然后我必须遍历它们以解析其他一些属性,特别是另一个表中的记录数。
我想要做的是重构代码以在查询期间获取计数。
这是我的尝试,线索表上的连接是我正在处理的。
var orderItems = dataContext.ES_OrderDetail
.Join(dataContext.ES_Products, od => od.ProductID, p => p.ProductID, (od, p) => new { od, p })
.Join(dataContext.ES_Orders, od => od.od.OrdID, o => o.OrdID, (od, o) => new { od, o })
.Join(dataContext.leads, od => new { DID = od.od.od.DeviceID, CID = od.o.CompanyID.Value, EID = od.o.EventId.Value },
l => new { DID = l.unitID, CID = l.companyID, EID = l.eventID }, (od,l) => new { order = od.o, odetail = od.od, lead = l })
通过这个查询,我从它 Select() 到一个对象中以获取我需要的各种数据,例如:
.Select(s => new OutputClass
{
OrderId = s.order.OrdId,
ItemId = s.odetail.od.ItemId,
//etc
}.ToList();
我想做的是,在 Select() 中,有类似的东西
LeadCount = s.leads.Count()
但 Lead 是对实体的引用,简而言之,我不确定如何加入实体但对其执行聚合,而不是访问数据。 在我调用 Select() 之后,我然后遍历每个并执行另一个查询以获取计数。
NetMage 是正确的组加入。 加入团体会给你你需要的东西( leads.Count()
)。 我确实将方法语法更改为查询语法。 在这种情况下,查询语法对我来说更具可读性(您可以在此处阅读有关这两种语法的更多信息: https : //michaelscodingspot.com/when-to-use-c-linq-with-query-syntax-over-method-syntax / )。
下面的查询使用LeadId
主键列,但这可能会在您的代码中发生变化。 我不知道Lead
表的主键是什么。
var orderItemsNew = (from orderDetail in dataContext.ES_OrderDetail
join product in dataContext.ES_Products on orderDetail.ProductID equals p.ProductID
join order in dataContext.ES_Orders on orderDetail.OrdID equals order.OrdID
join lead in dataContext.leads on new { DID = orderDetail.DeviceID, CID = order.CompanyID.Value, EID = order.EventId.Value } equals
new { DID = lead.unitID, CID = lead.companyID, EID = lead.eventID}
group lead.LeadId by new {
OrderId = order.OrdId,
ItemId = orderDetail.ItemId
// etc
}
into leadCountJoin
select new OutputClass
{
LeadCount = leadCountJoin.Count()
OrderId = leadCountJoin.Key.OrderId,
ItemId = leadCountJoin.Key.ItemId,
// etc
});
您还可以列出必要的关键字来对潜在客户记录进行分组。 现在只有OrderId
和ItemId
是查询的一部分,但可能您需要列出两个以上的键。
PS:如果您坚持使用 group by 语句,请提供包含所有OutputClass
属性的整个查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.