连接多个表,然后在linq中分组和求和
如何在LINQ中正确获取此SQL查询? SQL查询:连接多个表,然后在linq中分组和求和,linq,Linq,如何在LINQ中正确获取此SQL查询? SQL查询: select c.Name, sum(t.value) from Categories c join Items i on c.Id = i.CategoryId join Transactions t on t.ItemId = i.Id where datepart(YEAR, t.CreatedTime) = 2016 and datepart(MONTH, t.CreatedTime) = 2 group by c.
select c.Name, sum(t.value)
from Categories c
join Items i on c.Id = i.CategoryId
join Transactions t on t.ItemId = i.Id
where datepart(YEAR, t.CreatedTime) = 2016
and datepart(MONTH, t.CreatedTime) = 2
group by c.Name
我在LINQ也尝试过这样做,结果是:
var query = from cat in _context.Categories
join item in _context.Items on cat.Id equals item.CategoryId
join trans in _context.Transactions on item.Id equals trans.ItemId
where trans.CreatedTime.Month == e.RowIndex && trans.CreatedTime.Year == 2016
group new { cat.Name, trans.Value } by cat.Name into g
select new
{
Value = g.Sum(entry => entry.Value)
};
但它似乎完全错了,除了没有给我返回类别名称之外,它还返回了错误的总和值
我有三张桌子:
具有列Id和列名称的类别
列Id、名称、CategoryId、LastValue、IsIncome、,
具有列Id、ItemId、Value、CreatedTime、IsIncome的事务您可以使用
g.Key
获取类别名称。除此之外,一切似乎都正常,应该会给您与SQL查询相同的结果。如果你说var sql=query.ToString(),你会看到什么代码>?哦,好的,对不起,就这些了,g键解决了问题,第二次尝试时它返回正确的答案,我只是感到困惑。:)您可以使用g.Key
获取类别名称。除此之外,一切似乎都正常,应该会给您与SQL查询相同的结果。如果你说var sql=query.ToString(),你会看到什么代码>?哦,好的,对不起,就这些了,g键解决了问题,第二次尝试时它返回正确的答案,我只是感到困惑。:)