【发布时间】:2009-05-23 13:09:39
【问题描述】:
如何在 Linq 中使用 2 个字段进行分组?
(from i in info
group i by i.OrderId into g
select new { orderId = g.Key, infos = g });
不仅使用订单 ID 进行排序,还使用两个字段,如 ...
group by i.orderId And i.City
这会怎样?
【问题讨论】:
如何在 Linq 中使用 2 个字段进行分组?
(from i in info
group i by i.OrderId into g
select new { orderId = g.Key, infos = g });
不仅使用订单 ID 进行排序,还使用两个字段,如 ...
group by i.orderId And i.City
这会怎样?
【问题讨论】:
我相信你想要这样的东西:
var result = from i in info
group i by new { OrderId = i.OrderId, City = i.City } into g
select new { OrderId = g.Key, Infos = g };
将键创建为匿名类型只允许 LINQ 对匿名类型的所有字段使用默认的相等比较器,这在大多数情况下都可以完成。
【讨论】:
作为 Noldorin 回答的后续措施,当匿名类型上的字段名称与您设置的字段匹配时,您可以省略它们。
例子:
var result = from i in info
group i by new { i.OrderId, i.City } into g
select new { OrderId = g.Key, Infos = g };
【讨论】:
Noldorin 和 Josh Einstein 的答案的另一个后续行动...OrderID 将采用整个密钥...在这种情况下,它是一个具有两个属性 OrderID 和 City 的新对象。如果您的最终结果集需要 OrderID 为 OrderID,那么您需要执行以下操作:
var result = from i in info
group i by new { i.OrderId, i.City } into g
select new { OrderId = g.Key.OrderId, Infos = g };
【讨论】: