Linq 是否可以按对象属性分组,但将整个对象放在键中?
假设Linq 是否可以按对象属性分组,但将整个对象放在键中?,linq,Linq,假设query是这样的: var query = from x in db.Customers join y in db.Orders on x.Id Equals y.CustomerId where ... select new {Customer = x, Order = y} 我希望结果按客户分组: var resultsByCustomer = query.GroupBy(x => x.Cu
query
是这样的:
var query = from x in db.Customers
join y in db.Orders
on x.Id Equals y.CustomerId
where ...
select new {Customer = x, Order = y}
我希望结果按客户分组:
var resultsByCustomer = query.GroupBy(x => x.Customer.Id)
这很好,只是现在分组键是客户id,但我希望它是整个客户对象,因为我希望访问该客户的其他属性(而不是我希望按其分组的属性)
我可以这样做:
var resultsByCustomer = query.GroupBy(x => x.Customer)
但这不起作用,因为它似乎是在Customer类上按对象相等性分组,而不是按Customer id分组
是否可以按客户Id分组,但将整个客户对象作为密钥返回?继续按客户Id分组(Id作为密钥),然后从组中的第一个项目中提取客户
var resultsByCustomer =
from g in query.GroupBy(x => x.Customer.Id)
let customer = g.Select(x => x.Customer).FirstOrDefault()
select ...;
在这种情况下,您真的需要
GroupBy
GroupJoin
在我看来是一个更好的选择。如果这是一个具有适当导航属性的实体框架,那么您只需查询客户
就可以免费获得所有这些。当然,如果您寻求一种通用方法,并且分组的关键点是唯一的,那么@StripplingWarrior解决方案应该适合您。