2017-09-12 147 views
0

我有3個表(在原有6,但短越好這裏) 他們都擁有一個共同的鍵列我想過濾和聯合使用LINQ聯盟表

所有這些表在這裏我做了什麼,到目前爲止,實際上它的工作原理,但你會明白我爲什麼發佈此,因爲你看到下面

 var query = (from icr in ictetkikRadyoloji 
           where icr.CommanId == userId         
           select new MyCustomModel 
           { 

            ID = icr.ID, 
            IstemTarihi = icr.IstemTarihi, 
            Laboratuvar = icr.Laboratuvar, 
            Sonuc = icr.Sonuc, 
            HastaGuid = "-", 
            Type_ = "1" 
           }).Union(from icb in ictetkikBakteriyoloji 
              where icb.CommanId == userId          select new MyCustomModel 
              { 

               ID = icb.ID, 
               IstemTarihi = icb.IstemTarihi, 
               Laboratuvar = icb.Laboratuvar, 
               Sonuc = "-", 
               HastaGuid ="someGuid", 
               Type_ = "2" 
              }).Union(from icbk in ictetkikBiyokimya 
                where icbk.CommanId == userId            select new MyCustomModel 
                { 

                 ID = icbk.ID, 
                 IstemTarihi = DateTime.Now, 
                 Laboratuvar = icbk.Laboratuvar, 
                 Sonuc = "-", 
                 HastaGuid ="SomeGuid", 
                 Type_ = "3" 
                }); 

你看它那麼醜陋和比這個醜陋的起源:(我怎樣才能使代碼這一點更美麗,因爲他們都返回實體作爲具體的模型(MyCustomModel) 我覺得它可以..

回答

2

您可以先執行投影,然後在所有情況下合併。投影應該具有的唯一附加數據是CommanId。您可以使用anonymous types,因此您不必爲中間投影創建另一個類。之後,您可以指定您的過濾器一次,然後進行最終投影到MyCustomModel

例如:

var unionQuery = (from icr in ictetkikRadyoloji 
        select new 
        { 
         ID = icr.ID, 
         IstemTarihi = icr.IstemTarihi, 
         Laboratuvar = icr.Laboratuvar, 
         Sonuc = icr.Sonuc, 
         HastaGuid = "-", 
         Type_ = "1", 
         CommanId = icr.CommanId 
        }).Union(
        (from icb in ictetkikBakteriyoloji 
        select new 
        { 

         ID = icb.ID, 
         IstemTarihi = icb.IstemTarihi, 
         Laboratuvar = icb.Laboratuvar, 
         Sonuc = "-", 
         HastaGuid = "someGuid", 
         Type_ = "2", 
         CommanId = icb.CommanId 
        })).Union(
        (from icbk in ictetkikBiyokimya 
        select new 
        { 

         ID = icbk.ID, 
         IstemTarihi = DateTime.Now, 
         Laboratuvar = icbk.Laboratuvar, 
         Sonuc = "-", 
         HastaGuid = "SomeGuid", 
         Type_ = "3", 
         CommanId = icbk.CommanId 
        })); 

var query = from i in unionQuery 
      where i.CommanId = userId 
      select new MyCustomModel 
      { 
       ID = i.ID, 
       IstemTarihi = i.IstemTarihi, 
       Laboratuvar = i.Laboratuvar, 
       Sonuc = "-", 
       HastaGuid = "SomeGuid", 
       Type_ = "3", 
      }; 

另外,您可以添加屬性CommanIdMyCustomModel,然後你不需要最終投影和匿名類型。

1

你有兩種選擇:通過對象

負載對象的內存,使3個不同的副本列表

  var query = (from icr in ictetkikRadyoloji 
      where icr.CommanId == userId 
      select new List<MyCustomModel>() 
      { 
       new MyCustomModel() 
       { 

        ID = icr.ID, 
        IstemTarihi = icr.IstemTarihi, 
        Laboratuvar = icr.Laboratuvar, 
        Sonuc = icr.Sonuc, 
        HastaGuid = "-", 
        Type_ = "1" 
       }, 
       new MyCustomModel 
       { 

        ID = icb.ID, 
        IstemTarihi = icb.IstemTarihi, 
        Laboratuvar = icb.Laboratuvar, 
        Sonuc = "-", 
        HastaGuid = "someGuid", 
        Type_ = "2" 
       }, 
       new MyCustomModel 
       { 

        ID = icbk.ID, 
        IstemTarihi = DateTime.Now, 
        Laboratuvar = icbk.Laboratuvar, 
        Sonuc = "-", 
        HastaGuid = "SomeGuid", 
        Type_ = "3" 
       } 
      }); 

2.使用循環

1.獲取列表每個對象。

 var result = new List<MyCustomModel>(); 
     var query = (from icr in ictetkikRadyoloji 
       where icr.CommanId == userId 
       select icr) 
      .ToList() 
      .ForEach(x => 
      { 
       result.Add(new MyCustomModel() 
       { 

        ID = icr.ID, 
        IstemTarihi = icr.IstemTarihi, 
        Laboratuvar = icr.Laboratuvar, 
        Sonuc = icr.Sonuc, 
        HastaGuid = "-", 
        Type_ = "1" 
       }); 

       result.Add(new MyCustomModel() 
       { 

        ID = icr.ID, 
        IstemTarihi = icr.IstemTarihi, 
        Laboratuvar = icr.Laboratuvar, 
        Sonuc = "-", 
        HastaGuid = "someGuid", 
        Type_ = "2" 
       }); 

       result.Add(new MyCustomModel() 
       { 

        ID = icr.ID, 
        IstemTarihi = DateTime.Now, 
        Laboratuvar = icr.Laboratuvar, 
        Sonuc = "-", 
        HastaGuid = "SomeGuid", 
        Type_ = "3" 
       }); 

      });