我正在尝试将sql查询转换为正在运行的linq语句,遗憾的是它并不像预期的那么容易。
原始SQL查询如下所示:
SELECT DISTINCT tt1.ArtikelId
FROM
(
SELECT ArtikelId FROM [dbo].[ArtSearchEinfachView]
WHERE Feld = 'Listungsstatus' AND Wert = '0'
) tt1
INNER JOIN
(
SELECT ArtikelId FROM [dbo].[ArtSearchEinfachView]
WHERE Feld = 'AktiverAktikel' AND Wert = '1'
) tt2
ON tt1.ArtikelId = tt2.ArtikelId
INNER JOIN
(
SELECT ArtikelId FROM [dbo].[ArtSearchEinfachView]
WHERE Feld = 'Artikelbezeichnung' AND Wert like '%berentzen%'
) tt3
ON tt1.ArtikelId = tt3.ArtikelId
稍后会有更多联接,稍后会构建一个谓词构建器,但是对于这个页面,我只包含了2。
我试图转换它。我正在使用devforce实体管理器,但遗憾的是它无法正常工作:
public async Task<int> LadeArtikelCountEinfachNew(string sucheingabe)
{
var query = _artikelContainer.ArtSearchEinfach.Where(p => p.Feld == "Listungsart" && p.Wert == "0");
query = query.Join(_artikelContainer.ArtSearchEinfach.Where(x => x.Feld == "AktiverAktikel" &&
x.Wert == "1"),
x => x.ArtikelId,
y => y.ArtikelId,
(x,y) => y).Distinct();
query = query.Join(_artikelContainer.ArtSearchEinfach.Where(p => p.Feld == "Artikelbezeichnung" &&
p.Wert.Contains(sucheingabe)),
x => x.ArtikelId,
y => y.ArtikelId,
(x, y) => y).Distinct();
return await query.AsScalarAsync().Count();
}
有人可以帮助我吗?
答案 0 :(得分:1)
我不能说我明白为什么你在同一张桌子上使用多个内连接而不是和/或从句,但我认为这是一个很好的理由。对你正在做的最接近的类似LINQ查询可能是这个,它使用匿名投影:
var query = _artikelContainer.ArtSearchEinfach
.Where(p => p.Feld == "Listungsart" && p.Wert == "0")
.Select(p => new { p.ArtikelId } );
query = query.Join(_artikelContainer.ArtSearchEinfach
.Where(x => x.Feld == "AktiverAktikel" && x.Wert == "1")
.Select(x => new { x.ArtikelId } ),
x => x.ArtikelId,
y => y.ArtikelId,
(x,y) => y);
query = query.Join(_artikelContainer.ArtSearchEinfach
.Where(p => p.Feld == "Artikelbezeichnung" && p.Wert.Contains(sucheingabe))
.Select(p => new { p.ArtikelId } ),
x => x.ArtikelId,
y => y.ArtikelId,
(x, y) => y);
var results = await query.Distinct().ExecuteAsync();