Linq Group By Query不会削减它

时间:2014-08-21 17:11:56

标签: c# linq select linq-group

古老的"小组"选项很好地处理多个分组字段。 问题:如果我想在结果集中包含不在(grp)对象组中的字段(不需要分组),该怎么办?根据那里的大量例子,它似乎无法处理这种情况。

在下面的示例中,使用grp对象将所有group by字段很好地包含在结果集中。好吧,让我们说"地址"有一条"街道"或"电话"我只想在没有分组的情况下包含在结果中。选项?

var qry = from addr in addresses
          group addr by new { addr.city, addr.state, addr.country } into grp
          select new
          {
            city = grp.Key.city,
            state = grp.Key.state,
            country = grp.Key.country,
            count = grp.Count(),
          };

2 个答案:

答案 0 :(得分:0)

不在分组键中的元素可以从组本身中选择:

var qry = from addr in addresses
          group addr by new { addr.city, addr.state, addr.country } into grp
          select new
          {
            city = grp.Key.city,
            state = grp.Key.state,
            country = grp.Key.country,
            count = grp.Count(),
            phone = grp.Select(a => a.Phone).FirstOrDefault()
          };

您必须考虑使用哪种“聚合”(例如,First,Last,Min,Max,FirstOrDefault,...),具体取决于您要使用的逻辑以及您正在使用的查询提供程序。例如,EF支持FirstOrDefault,但不支持First

答案 1 :(得分:0)

您可能不会需要进行分组,但是与分组具有1:1关系的任何内容都会被有效地分组。因此,只需按电话分组,您就会得到相同的结果。

var qry = from addr in addresses
      group addr by new { addr.city, addr.state, addr.country, addr.Phone } into grp
      select new
      {
        city = grp.Key.city,
        state = grp.Key.state,
        country = grp.Key.country,
        count = grp.Count(),
        phone = grp.Key.Phone
      };