2016-04-26 57 views
3

我有2個數據庫表。c#Linq查詢與元組列表

在表1中Calculate我有1行通過Id映射到表2中的多行CalculdateData

現在我需要從table1 Calculate加載數據以及來自Table2 CalculdateData的所有相關細節。

我如何將有詳細爲Tuple-List.?

所以基本上對CalculateData我有每行4列,我需要投入一個元組。這意味着如果我會有例如4行我需要在列表中創建4個元組。

IEnumerable<Storage> context = new MyEntities(); 

var Result = (from a in context.calculate 
      join b in context.CalculateData on a.Id equals b.CalcId into c 
      where a.SpecialID == 2023 && a.VersionId == 1 
      orderby a.InternalOrderNr ascending 
      select new Storage 
      { 
       myField1 = a.Field1; 
       myField2 = a.Field2; 
       myField3 = a.Field3; 
       < MISSING PART AND QUESTION > 
      }).ToList(); 

      return Result; 


public class Storage 
{ 
      public int myField1; 
      public int myField2; 
      public int myField3; 
      public List<Tuple<int, int, string, decimal>> myField4; 
} 

回答

0

您可以嘗試類似this.This尚未測試。

select new Storage 
{ 
     myField1 = a.Field1, 
     myField2 = a.Field2, 
     myField3 = a.Field3, 
     myField4 = c.Select(d => new Tuple<int, int, string, decimal>(d.Field1, d.Field2, d.Field3, d.Field4)).ToList() 
}).ToList(); 

這完全是在此基礎上This tutorial

+0

不,這不是我想要的。包含1值和myField4的字段myField1,myField2和myField3可以包含多個值。 myField4是一個List(List > myField4)查看我定義的Class存儲。 – Maik

1

這應該工作:

 var Result = (from a in calculate 
         join b in calculateData on a.Id equals b.CalcId into c 
         where a.SpecialID == 2023 && a.VersionId == 1 
         orderby a.InternalOrderNr ascending 
         select new Storage 
         { 
          myField1 = a.Field1, 
          myField2 = a.Field2, 
          myField3 = a.Field3, 
          myField4 = c.Select(d => new Tuple<int, int, string, decimal> 
                (d.Field1, d.Field2, d.Field3, d.Field4)) 
                .ToList() 
         }).ToList(); 

     return Result; 

這也將是一件好事,以檢查該查詢在單個SQL請求轉換,你不是製造新每個元組列表創建的sql請求。

編輯:如果你將與查詢自定義類型問題(如@Toxantron指出)這個選擇應該工作:

var queryResult = (from a in calculate 
           join b in calculateData on a.Id equals b.CalcId into c 
           where a.SpecialID == 2023 && a.VersionId == 1 
           orderby a.InternalOrderNr ascending 
           select new 
           { 
            a.Field1, 
            a.Field2, 
            a.Field3, 
            myField4 = c.Select(d => new { 
               d.Field1, d.Field2, d.Field3, d.Field4}) 


           }).ToList(); 
    result = queryResult.Select(r => new Storage 
    { 
     myField1 = r.Field1, 
     myField2 = r.Field2, 
     myField3 = r.Field3, 
     myField4 = r.myField4.Select(t => new Tuple<int,int,decimal,string> 
              (t.Field1, t.Field2, t.Field3, t.Field4)) 
          .ToList() 
    }) 

    return Result; 
+2

我不確定最新的實體框架,但是直到EF 6.1纔有可能在Linq2Entities中使用非默認的構造函數。 – Toxantron

+1

@Toxantron也是我的擔憂,我認爲它仍然不可能,我們將不得不選擇匿名類型並在選擇後進行轉換。 –

+0

我認爲只有在內存'選擇'只有可能 – Eldho