linq - 是否可以按对象属性进行分组,但将整个对象放在 Key 中?

标签 linq

假设查询如下所示:

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 类上的对象相等性进行分组,而不是按客户 ID 进行分组。

是否可以按客户 Id 进行分组,但将整个客户对象作为键返回?

最佳答案

继续按客户 ID(以 ID 作为键)对它们进行分组,然后从组中的第一个项目中提取客户。

var resultsByCustomer = 
    from g in query.GroupBy(x => x.Customer.Id)
    let customer = g.Select(x => x.Customer).FirstOrDefault()
    select ...;

关于linq - 是否可以按对象属性进行分组,但将整个对象放在 Key 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35023072/

相关文章:

c# - 将 "raw"XML 字符串插入 XElement

c# - 如何使用 LINQ 比较 char 数组的元素?

c# - 有没有一种方法可以在 C#/LINQ 中产生、发出或以其他方式实现以前为空的数组?

c# - 使用字符串时linq中是否需要新关键字

c# - Linq - boolean - where 语句

c# - 如何使用 Linq 按日期对订单列表进行分组

vb.net - Entity Framework 多对多使用 VB.Net Lambda

c# - 如何使用c#计算文件系统中一个文件夹中相似名称文件的数量?

c# - 使用 Linq 的 DbCommand?

linq - C# Linq "join"在 Rust 中的等价物是什么?