2014-10-08 33 views
0

我正在嘗試將sql查詢轉換爲正常工作的linq語句,不幸的是,它不如預期那麼容易。加入不同 - 將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(); 
    } 

有人可以請幫助我嗎?

回答

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(); 
+0

爲什麼我使用它是因爲它的產品索引,表原因。一個產品有100個包含數據的表格,我們將我們搜索頁面所需的所有數據(索引所有數據)放到一個表格中,所以我們的項目只需要使用這個表格來搜索特定的產品。這使得我們的產品搜索比加入所有表格等要快得多。謝謝,這是一個罰款。 :) – Jannik 2014-10-20 11:57:32