2016-04-26 9 views
3

私は2つのデータベーステーブルを持っています。タプルリストを使用したLinqクエリ

表1 Calculate私は、Idを介して表2の複数の行にマップされる1つの行を持っています。CalculdateData

ここで、テーブル1 Calculateのデータを、テーブル2 CalculdateDataのすべての関連する詳細と一緒にロードする必要があります。

は、どのように私は私はタプルの中に配置する必要があり、行ごとに4列を持っているので、基本的にCalculateDataためTuple-List.?

に詳細を持っているでしょう。意味私は例の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

これは次のように試すことができます。これはまだテストされていません。

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

いいえ、これは私が欲しいものではありません。 Fields myField1、myField2およびmyField3には1つの値が含まれ、myField4には複数の値が含まれます。 myField4はList(List > myField4)です。定義したクラスストレージを確認してください。 – 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

最新のEntity Frameworkについてはわかりませんが、EF 6.1まで、Linq2Entitiesでデフォルト以外のコンストラクタを使用することはできませんでした。 – Toxantron

+1

@Toxantronでも私の心配は、私はそれはまだ可能ではないと思う、私たちは匿名型を選択し、選択後にそれを変換する必要があります。 –

+0

私はメモリ 'Select'のみが可能であると思う – Eldho

関連する問題