【发布时间】:2017-06-01 20:16:30
【问题描述】:
我正在编写一个 C# LINQ 代码,我试图通过按 Table1 中的列分组来连接两个表
下面是返回正确结果的 SQL 查询
SELECT
SUM(scr.Count),spl.Name
FROM Table1 scr
,Table2 spl
WHERE scr.StatusId = spl.StatusId
GROUP by spl.Name
返回错误结果的等效 LINQ
(from l in _dataContext.Table1
join r in
_dataContext.Table2 on
new { l.StatusId } equals new { r.StatusId }
into gj
from r in gj.DefaultIfEmpty()
select new
{
l.Name,
Count = gj.Sum(j => j.Count)
}).GroupBy(l => l.Name).Select(x => new DataPoint
{
Name = x.Key,
Y = x.Sum(y => y.Count)
}).ToList();
无法找出错误,有没有更好的方法来获得与上述 SQL 查询等效的结果?
【问题讨论】:
-
是的,你需要学习 LINQ。它不像 SQL。
-
您的 Linq 代码正在执行左连接,这就是
DefaultIfEmpty所做的。 -
应该在你的 SQL 代码中使用明确的
JOIN。 -
查看 msdn 了解左外连接:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
标签: c# sql-server linq join