Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 是否可以按对象属性分组,但将整个对象放在键中?_Linq - Fatal编程技术网

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解决方案应该适合您。