2014-01-27 35 views
1

我的模式是这样的:使用加入,集团通过和SUM在实体框架

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

而且我有以下查询:

SELECT item, sum(quantity) 
FROM ReturnItem 
JOIN ReturnRequest 
ON ReturnRequest.returnRequestId = ReturnItem.returnRequestId 
WHERE ReturnRequest.orderNumber = '1XX' 
GROUP BY item 

如何查询转换为实体框架和返回List<ReturnItem>?我可以使用.Include而不是.Join吗?

回答

7
from ri in db.ReturnItems 
join rr in db.ReturnRequests 
    on ri.returnRequestId equals rr.returnRequestId 
where rr.orderNumber == "1XX" 
group ri by ri.item into g 
select new { 
    Item = g.Key, 
    Quantity = g.Sum(i => i.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) 
    }); 
+0

如何从该查询返回一个列表''? – janinaj

+0

@janinaj你的SQL查询返回不同的结果。但是你可以选择'new ReturnItem {item = g.Key,quantity = g.Sum(i => i.quantity)}'而不是匿名对象。转换为列表非常简单我认为 –

+0

嗨,我收到错误'指定的类型成员'returnItems'不支持LINQ to Entities。只支持初始化器,实体成员和实体导航属性。' – janinaj