古老的"小组"选项很好地处理多个分组字段。 问题:如果我想在结果集中包含不在(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(),
};
答案 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
};