C# LINQ-通过Group by进行多连接并获得平均值
我正在尝试用LINQ写这个选择,但是我很长时间都没有成功地修复它。我也试过了,但在我的代码中不起作用。很明显,我错了 SQL: 林克:C# LINQ-通过Group by进行多连接并获得平均值,c#,linq,join,average,C#,Linq,Join,Average,我正在尝试用LINQ写这个选择,但是我很长时间都没有成功地修复它。我也试过了,但在我的代码中不起作用。很明显,我错了 SQL: 林克: var q3 = from l in db.location join tp in db.type on l.ID_type equals tp.ID join e in db.event on l.ID equals u.ID_location join t in db.ticket on e.ID equals t.ID_event group tp by
var q3 = from l in db.location
join tp in db.type on l.ID_type equals tp.ID
join e in db.event on l.ID equals u.ID_location
join t in db.ticket on e.ID equals t.ID_event
group tp by new {Type_name = tp.type_name} into grp
select new
{
Type_name = grp.Key.type_name,
avgPrice = grp.Average( x => x.ticket.price)
};
有几个问题:
u.ID\u位置
需要e.ID\u位置
李>
t
而不是tp
进行分组分组依据
中使用匿名类型var results =
from l in db.location
join tp in db.type on l.ID_type equals tp.ID
join e in db.event on l.ID equals e.ID_location
join t in db.ticket on e.ID equals t.ID_event
group t by new tp.type_name into grp
select new
{
Type_name = grp.Key,
avgPrice = grp.Average(x => x.price)
};
如果您碰巧在实体之间设置了导航属性,这将容易得多。很难说实体之间应该是如何关联的,但我认为这样做是可行的:
// average ticket price per location type
var results =
from t in db.ticket
group t by t.event.location.type.type_name into g
select new
{
Type_name = g.Key,
avgPrice = g.Average(x => x.price)
};
或使用流利的语法:
var results = db.ticket.GroupBy(t => t.event.location.type.type_name)
.Select(g => new
{
Type_name = g.Key,
avgPrice = g.Average(x => x.price)
});
非常感谢你!它工作得很好:)现在我可以去尝试更难的选择。。。
var results = db.ticket.GroupBy(t => t.event.location.type.type_name)
.Select(g => new
{
Type_name = g.Key,
avgPrice = g.Average(x => x.price)
});