C# 在实体框架中使用Join、Group By和Sum
我的模型看起来像:C# 在实体框架中使用Join、Group By和Sum,c#,sql,entity-framework,C#,Sql,Entity Framework,我的模型看起来像: public class ReturnItem { public int returnItemId { get ; set; } public int returnRequestId { get; set; } public int quantity { get; set; } public string item { get; set; } } public class ReturnRequest { public int retu
public class ReturnItem
{
public int returnItemId { get ; set; }
public int returnRequestId { get; set; }
public int quantity { get; set; }
public string item { get; set; }
}
public class ReturnRequest
{
public int returnRequestId { get; set; }
public string orderNumber { get; set; }
public IEnumerable<ReturnItem> returnItems { get; set; }
}
如何将查询转换为实体框架并返回列表?我可以用.Include代替.Join吗
不能使用Include代替Join,因为Include已转换为左外部联接,但此处需要内部联接
但您可以使用导航属性隐式执行连接:
db.ReturnRequests
.Where(rr => rr.orderNumber == "1XX")
.SelectMany(rr => rr.returnItems)
.GroupBy(ri => ri.item)
.Select(g => new {
Item = g.Key,
Quantity = g.Sum(ri => ri.quantity)
});
不能使用Include代替Join,因为Include已转换为左外部联接,但此处需要内部联接
但您可以使用导航属性隐式执行连接:
db.ReturnRequests
.Where(rr => rr.orderNumber == "1XX")
.SelectMany(rr => rr.returnItems)
.GroupBy(ri => ri.item)
.Select(g => new {
Item = g.Key,
Quantity = g.Sum(ri => ri.quantity)
});
如何从该查询返回列表?@janinaj您的SQL查询返回了不同的结果。但是您可以选择新的ReturnItem{item=g.Key,quantity=g.Sumi=>i.quantity}而不是匿名对象。转换为列表非常容易,我想您好,我遇到了一个错误,指定的类型成员“returnItems”在LINQ to Entities中不受支持。只支持初始值设定项、实体成员和实体导航属性。@janinaj遗憾的是,无法在实体查询中构造复杂类型。所以您需要从数据库中加载匿名对象,然后使用一个可数调用,然后将匿名对象投影到ReturnItem Type如何从该查询返回列表?@janinaj您的SQL查询返回了不同的结果。但是您可以选择新的ReturnItem{item=g.Key,quantity=g.Sumi=>i.quantity}而不是匿名对象。转换为列表非常容易,我想您好,我遇到了一个错误,指定的类型成员“returnItems”在LINQ to Entities中不受支持。只支持初始值设定项、实体成员和实体导航属性。@janinaj遗憾的是,无法在实体查询中构造复杂类型。所以您需要从数据库中加载匿名对象,然后使用一个可数调用,然后将匿名对象投影到ReturnItem类型
db.ReturnRequests
.Where(rr => rr.orderNumber == "1XX")
.SelectMany(rr => rr.returnItems)
.GroupBy(ri => ri.item)
.Select(g => new {
Item = g.Key,
Quantity = g.Sum(ri => ri.quantity)
});