【发布时间】:2021-12-29 19:26:00
【问题描述】:
我有一个要转换为 Linq 的 SQL 查询。
这是我的 SQL 查询:
SELECT
Calisanlar.CalisanId,
CovidYakalanmaTarih,
CovidBitisTarih
FROM
Calisanlar
INNER JOIN
Covids ON Calisanlar.CalisanId = Covids.CalisanId
WHERE
Calisanlar.CalisanId IN (SELECT TOP 10 CalisanId
FROM Hastaliklar
GROUP BY CalisanId
ORDER BY COUNT(*) DESC)
AND DATEDIFF(DAY, CovidYakalanmaTarih, GETDATE()) BETWEEN 0 AND 30
我编写了这段 C# 代码,但它没有按预期工作,因为我没有编写“DATEDIFF(DAY, CovidYakalanmaTarih, GETDATE()) BETWEEN 0 AND 30”linq 版本:
var query = context.Hastaliklar
.GroupBy(x => x.CalisanId)
.OrderByDescending(grp => grp.Count())
.Select(grp => grp.Key)
.Take(10)
.ToList();
var result = from hastalik in context.Hastaliklar
join covid in context.Covids
on hastalik.CalisanId equals covid.CalisanId
where query.Contains(hastalik.CalisanId)
&& EF.Functions.DateDiffDay(covid.CovidYakalanmaTarih, covid.CovidBitisTarih)
select new SonBirAyCovidDto
{
CalisanId = covid.CalisanId,
CovidYakalanmaTarih = covid.CovidYakalanmaTarih,
CovidBitisTarih = covid.CovidBitisTarih
};
【问题讨论】:
-
在哪些方面没有按预期工作?
-
EF.Functions.DateDiffDay模拟您的 DATEDIFF,但您的 LINQ 中没有任何内容可以模拟BETWEEN 0 AND 30。 -
是的,反正我写不出它的 linq 版本
-
我没有写“DATEDIFF(DAY, CovidYakalanmaTarih, GETDATE()) BETWEEN 0 AND 30” linq 版本@StriplingWarrior
-
假设您不需要 BETWEEN 的某个水晶球的未来数据。
>= 30就够了。
标签: sql entity-framework linq linq-to-sql