Linq组按查询不切割它



古老的"group by"选项很好地处理了多个group by字段。问题:如果我想在结果集中包含不属于group by (grp)对象的字段(这些字段不需要分组),该怎么办?从无数的例子来看,它似乎没有处理好这种情况。

在下面的示例中,使用grp对象很好地将所有group by字段包含在结果集中。好,假设"addresses"有一个"street"或"phone",我只是想把它们不分组地包含在结果中。选择吗?

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

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

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: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
      };

相关内容

  • 没有找到相关文章

最新更新