0

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

在下面的示例中,所有分组依据字段都很好地包含在使用 grp 对象的结果集中。好的,假设“地址”有一个“街道”或“电话”,我只想将其包含在结果中而不进行分组。选项?

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(),
          };
4

2 回答 2

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

于 2014-08-21T17:18:16.500 回答
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
      };
于 2014-08-21T17:20:09.373 回答