3

に適用され、私はオブジェクトのリストを作成する必要があり、OrganizationEnrolment、3つのEntity Frameworkのエンティティ(ユーザー、EnrolmentTypeとOrganizationEnrolment)を使用して作成:私の問題は、取得する方法をSelectManyをした後でSelectManyは3つのリスト

List<OrganizationEnrolment> organizationEnrolments = 
    context.Organizations 
    .SelectMany(x => context.Users) 
    .SelectMany(x => context.EnrolmentTypes) 
    .Select(y => new OrganizationEnrolment { 
    EnrolmentType = enrolmentType 
    Organization = organization, 
    User = user 
    }) 

を3つの結合されたテーブルからのenrolmentType、組織、およびユーザー次のコードなお:私は、変数enrolmentType、組織とユーザーを持っていないので、

EnrolmentType = enrolmentType, 
Organization = organization, 
User = user 

が機能していません。

答えて

1

あなたはすべてのこれらの変数を取得するためにクエリ構文を使用することができます。

from o in context.Organizations 
from u in context.Users 
from et in context.EnrolmentTypes 
select new OrganizationEnrolment { 
    EnrolmentType = et 
    Organization = o, 
    User = u 
    } 

ローカル範囲変数は、select文に表示されます。 (EF6で確認)

ラムダ構文:

context.Organizations.SelectMany(
      o => context.Users.SelectMany(
       u => context.EnrolmentTypes.Select(
        et => new OrganizationEnrolment { 
         EnrolmentType = et 
         Organization = o, 
         User = u 
        }) 
      ) 
     ) 
+0

が、それはSelectManyを使用して同等の操作を行うことは可能ですか? –

+0

@MiguelMouraローカル変数をさらに渡すために、各SelectManyステートメントに匿名オブジェクトを作成する必要があります。私はそれがEFで動作するかどうかもわかりません –

+0

@MiguelMouraはラムダ構文の答えを更新しました –

2

が、これはあなたが探しているものですか?

var query= from o in context.Organizations 
      from u in context.Users 
      from t incontext.EnrolmentTypes 
      select new OrganizationEnrolment { 
         EnrolmentType = t, 
         Organization = o, 
         User = u 
        }; 

使用方法の構文は次のようになります。

var query= context.Organizations.SelectMany(o=>context.EnrolmentTypes 
           .SelectMany(t=>context.Users 
           .Select(u=>new OrganizationEnrolment { 
                EnrolmentType = t, 
                Organization = o, 
                User = u 
                }))); 
+0

SelectManyを使って同等のことをすることはできますか? –

+0

はい、この亜種は読みやすく、IMHO – octavioccl

関連する問題