2014-10-08 38 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