2017-10-23 6 views
0

これは私のクエリです、それは正常に動作し、私に期待される結果を与える;唯一の問題は、それがそのようになってしまいますので、86個のフィールドは、より多くの(笑)あるあるlinqクエリで特定のフィールドの数を

var result2 = (from dt in disMudahaleTipiRepo 
       join dm in disMudahaleRepo on dt.Kodu equals dm.MudahaleKodu 
       join kr in kurumRepo on dm.CreatedKurumKodu equals kr.KurumKodu 
       join yu in userRepo on dm.CreatedBy equals yu.ID 
       group dt by new { yu.Ad, yu.Soyad, kr.KurumAdi } into grp 
       select new 
       { 
        AdSoyAd = grp.Key.Ad + " " + grp.Key.Soyad, 
        KurumAdi = grp.Key.KurumAdi, 
        KoduSayisi1 = grp.Select(s => s.Kodu).Where(w=>w== "401.030").Count(), 
        KoduSayisi2 = grp.Select(s => s.Kodu).Where(w=>w== "402.090").Count(), 
        KoduSayisi3 = grp.Select(s => s.Kodu).Where(w=>w== "406.020").Count(), 
        KoduSayisi4 = grp.Select(s => s.Kodu).Where(w=>w== "402.020").Count(), 
        KoduSayisi5 = grp.Select(s => s.Kodu).Where(w=>w== "406.070").Count() 
        ... 
       }); 

   ... 
       select new 
       { 
        AdSoyAd = grp.Key.Ad + " " + grp.Key.Soyad, 
        KurumAdi = grp.Key.KurumAdi, 
        KoduSayisi1 = grp.Select(s => s.Kodu).Where(w=>w== "401.030").Count(), 
        ... 
        KoduSayisi91 = grp.Select(s => s.Kodu).Where(w=>w== "436.070").Count() 

       }); 

の代わりにこれをやって、私は辞書を作成し、(コードとして維持しようとしました、Number)理論では良いが、どのようにlinqにこれを伝えることができますか?

エンティティの定義はここでは必要ではないと私は分かち合うと思います。

あなたはサブクエリを使用することを試みることができるが、私は次のような作品かどうかをテストするために手元にデータベースを持っていない
public class DisMudahaleTipi : Entity 
{ 
    public string Kodu { get; set; } 
    public string Name { get; set; } 
} 
public class DisMudahale : AuditableEntity 
{ 
    public string MudahaleKodu { get; set; } 
} 
+0

あなたのケースは動的ピボットクエリのケースだと思います。あなたはlinqを使うことはできません。以下を参照してください:https://www.mssqltips.com/sqlservertip/2783/script-to-create-dynamic-pivot-queries-in-sql-server/希望すること –

+1

なぜあなたは '.Kodu'をインクルードできませんか?あなたのグループに 'group dt by new {yu.Ad、yu.Soyad、kr.KurumAdi、dt.Kodu}をgrp'のようにグループ化します。 – Vikhram

+0

私はこれがLinq2EntitiesでLinq2Objectsではないと仮定していますか? – Toxantron

答えて

1

var keys = ["401.300", .. ]; 
var result = (from dt in disMudahaleTipiRepo 
join dm in disMudahaleRepo on dt.Kodu equals dm.MudahaleKodu 
join kr in kurumRepo on dm.CreatedKurumKodu equals kr.KurumKodu 
join yu in userRepo on dm.CreatedBy equals yu.ID 
group dt by new { yu.Ad, yu.Soyad, kr.KurumAdi } into grp 
select new 
{ 
    AdSoyAd = grp.Key.Ad + " " + grp.Key.Soyad, 
    KurumAdi = grp.Key.KurumAdi, 
    Kudos = (from key in keys 
      select new 
      { 
       Key = key, 
       Amount = grp.Count(w => w.Kudo == key) 
      }).ToList(), 
}).ToList(); 

注:私は変更サブクエリに加えて、 Select(s=>s.Kudo).Where(w=>w=="...").Count()を使用すると、Linqの複雑さが軽減され、パフォーマンスが向上します。

+0

私はあなたのここでの論理をよく理解しました、私はこの方法で感謝の男を実装します – TyForHelpDude

+1

Maaaan、これは魅力のように動作します! :) – TyForHelpDude

+0

私は助けることができてうれしい – Toxantron

関連する問題