我一直在争论这个问题,但我找不到一个可靠的例子,所以我有希望转向专家。提前感谢任何帮助。
我有一个工作的SQL查询,我需要转换为Linq。最初,我有一个简单的linq查询驱动一个MSChart(折线图),显示列表中项目的每日排名。不幸的是,MSChart不会从图表中删除带有空值的天数,而只是将它们连接到第二天并使用非空值,因此我必须将空值替换为0。
以下查询通过对表的Left,Self Join执行此操作,我只抓取不同的天数列表(包括所有日期)。我知道我可以设置一个包含所有日期列表的辅助表,但这在所有情况下都应该同样有效。随后的SQL在SSMS中完美地适用于特定书籍/列表组合:
select L2.date, ISNULL(L1.ranking,0)
from (select distinct date from ListItem where ListID = 1) L2
Left join ListItem L1 on L2.date = L1.date and L1.BookID = 1 and L1.ListID = 1
order by date
这将返回所有日期和排名的列表,对于没有排名的任何日期排名为0。现在为了将图表绑定到此,我相信转换到Linq是最好的方法。
到目前为止,我会发布我的尝试,但我担心他们是错误的。如果需要更多信息,请告诉我。
感谢。
-Dan
答案 0 :(得分:1)
这样的东西?
var distinctDates =
ListItems
.Where(li => li.ListId == 1)
.Select(li => li.date)
.Distinct();
var list1 =
ListItems
.Where(li => li.BookID == 1 && li.ListID == 1);
var results =
distinctDates
.Join(
list1,
d => d,
li1 => li1.date,
(d, li1) => new{ date = d, ranking = li1.ranking ?? 0 }
)
.OrderBy(x => x.date);
(自第1次转变以来做了一些改变)