选择从的GroupBy列表中选择特定的列
public class Ticket {
public Ticket();
public int Id { get; set; }
public virtual TicketUrgency TicketUrgency { get; set; }
public int UrgencyId { get; set; }
}
public class TicketUrgency {
public TicketUrgency();
[Key]
public int Id { get; set; }
[MaxLength(50)]
[Required]
public string Name { get; set; }
public ICollection<Ticket> Tickets { get; set; }
}
我有以下LINQ声明:
var model = Entities
.Include(x => x.TicketUrgency)
.GroupBy(x => x.UrgencyId)
.Select(g => new {
id = g.Key,
count = g.Count(),
name = g.FirstOrDefault(u => u.UrgencyId == g.Key).TicketUrgency.Name
});
我通过UrgencyId
要Entities
组,然后返回键(UrgencyId
),并且还单个组中项目的数量并显示紧急度的名称。
当我运行它时,查询就会挂起而没有任何异常。
这应该工作,围绕做它的其他方式,首先检索所有TicketUrgencies和分组它。
Entities.Include(e => e.Tickets)
.GroupBy(t => t.Id)
.Select(g => new {
id = g.Key,
name = g.FirstOrDefault().Name,
count = g.FirstOrDefault().Tickets.Count()
});
很简单。刚刚尝试这一点:
var model = Entities
.Include(x => x.TicketUrgency)
.GroupBy(x => new {UrgencyId = x.UrgencyId ,
Name = x.TicketUrgency.Name})
.Select(x=> new { UrgencyId = x.Key.UrgencyId,
Name = x.Key.Name,
Count = x.Count()});
使用此功能,您无法获得组的项目数量。 x.Count不起作用。 –
@ElenaMaximova对不起,这是错误的。现在尝试代码 –
我得到一个错误:迭代查询结果时数据库中发生异常。 ORA-00905:缺少关键字 –
,你可以按这两个属性:
var model = Entities
.Include(x => x.TicketUrgency)
.GroupBy(x => new{ x.UrgencyId, x.TicketUrgency.Name })
.Select(g => new {
id = g.Key.UrgencyId,
count = g.Count(),
name = g.Key.Name
});
另一种方式可能是,作为@ASpirin建议,开始从TickerUrgency
查询:
var result= TicketUrgencies.Include(t=>t.Tickets)
.Where(t=>t.Tickets.Any())
.Select(t=> new {id=t.Id,name=t.Name, count= t.Tickets.Count()})
由于您正在按UrgencyId
进行分组,您知道g
的所有成员都与Key
具有相同的编号,因此只需拉第一个名称即可。你也知道g是不是空的,因为这会不会做一团:
var model = Entities
.Include(x => x.TicketUrgency)
.GroupBy(x => x.UrgencyId)
.Select(g => new {
id = g.Key,
name = g.First().TicketUrgency.Name
count = g.Count(),
});
为什么不用其他方式?找回所有紧急事件和门票的数量 – ASpirin
您使用的是什么EF? – NetMage
我正在使用EF核心 –