2015-06-19 117 views
0

我有以下數據庫模型:http://i.stack.imgur.com/gRtMD.png Kunde_Geraet/Kunde_Anwendung的多對多關係顯式映射表與附加信息。linq查詢crossjoin groupby優化

我想優化以下LINQ查詢:

var qkga = (from es in db.Eintrag_Systeme.Where(es => es.Eintrag_ID == id) 
        from kg in db.Kunde_Geraet.Where(kg => es.Geraet_ID == kg.Geraet_ID) 
        select new { Kunde = kg.Kunde, Geraet = es.Geraet, Anwendung = es.Anwendung }) 

        .Union(
        from es in db.Eintrag_Systeme.Where(es => es.Eintrag_ID == id) 
        from ka in db.Kunde_Anwendung.Where(ka => es.Anwendung_ID == ka.Anwendung_ID) 
        select new { Kunde = ka.Kunde, Geraet = es.Geraet, Anwendung = es.Anwendung }) 
        .GroupBy(kga => kga.Kunde, kga => new {Geraet = kga.Geraet, Anwendung = kga.Anwendung}); 

它會更好,當結果是IEnumerable的(昆德,IEnumerable的(Geraet),IEnumerable的(Anwendung))沒有空值爲工會。

我嘗試它作爲SQL命令

select Count(es.Geraet_ID), null as Anwendung_ID 
from Eintrag_Systeme es cross join Kunde_Geraet where es.Geraet_ID = Kunde_Geraet.Geraet_ID AND es.Eintrag_ID = @id 
union 
select null as Geraet_ID, Count(es.Anwendung_ID) 
from Eintrag_Systeme es cross join Kunde_Anwendung where es.Anwendung_ID = Kunde_Anwendung.Anwendung_ID AND es.Eintrag_ID = @id 
group by Kunde_ID 

但鴕鳥政策獲得計數()Anwendungen(應用程序)/ Geraete(設備)由

回答

0

唐關鍵昆德(客戶端)分組列出「T使用join但導航性能:

from k in context.Kunden 
select new 
{ 
    Kunde = k, 
    Geraete = k.Kunde_Geraete.Select(kg => kg.Geraet), 
    Anwendungen = k.Kunde_Anwendungen.Select(ka => ka.Anwendung) 
} 

現在你必須從你得到計數的基礎,等等。