2017-07-06 5 views
1

を含める:は、私は、以下の単純化された設定を持つエンティティクエリにLINQの中に無関係なテーブル

Public User 
{ 

    //Primary key 
    public int Id {get;set;} 

    public string Name {get; set;} 
} 

Public UserInfo 
{ 

    //Primary key 
    public int Id {get;set;} 

    //Foreign key to user table 
    public int userKey {get; set;} 
} 

テーブル間の関係は、多くのUserInfo

に一人のユーザーである私はuserテーブルから選択しようとしていますし、 userInfoテーブルを含めます。

私はこれを行うことはできません。

var users = Context.user.Include(u => u.userInfos); 

をユーザテーブルからUserInfoテーブルへの参照が存在しないとして。

context.userInfo.include(x => x.user) 

をしかしUserInfoテーブル内に対応するエントリがない場合、これは私が望んでいないものをしている、何も結果を返しません。

私はこれを行うことができます。また、これはuserInfoごとに1つの行を返しますが、userInfoのリストをパラメータとして使用して1つの行をuserに追加します。

var users = from us in Context.user 
    join inf in Context.userInfo 
    on us.Id equals inf.userKey 
    select new //etc 

をしかし、これはまた、上記のように、ユーザ情報エントリごとに同じ問題を1行を返します。

同様に私はこのようなテーブルを結合することができます。

要約すると、includeの機能と同じ方法で結果を得るために、このテーブルを含める方法があります。

私はこれを含めてすべての私の設定を調整することができます知っているが、それは私がここで尋ねているものではありません。

私はこれが行われますが、すべての私のこれまでのところ、私は決定的な答えを見つけることができませんでしたグーグルからすることはできません....

+1

'User'はそのようなプロパティ' UserInfos'か何かを持っていますか? (ちょっとしたお手伝いをして、大文字で始まるクラス名やプロパティ名のような命名規則に従ってください)。 –

+0

あなたはlinqで左結合を探していますか?ここに解決策がありますhttps://stackoverflow.com/questions/3404975/left-outer-join-in-linq –

答えて

1

私は、ユーザーごとに1行をしたい、のUserInfoのリストを疑いますパラメータ

ように私はあなたが財産としてのUserInfoのリストを意味すると仮定します。あなたはあなただけを探しているということを聞いて何の私の理解:GroupJoin

var users = from us in Context.user 
    join inf in Context.userInfo 
     on us.Id equals inf.userKey into infg 
    select new 
    { 
     User = us, 
     UserInfos = infg 
    }; 

join ... into量、すなわち、ユーザエンティティはuserinfosのグループに参加しました。まだ

ベター(しぶしぶ自分の命名規則以下)ナビゲーションプロパティuser.userInfosを使用することです:私は推測

var users = Context.user.Include(u => u.userInfos); 
+0

私はあなたの提案されたインクルードメソッドを使用できない理由を説明するために質問を編集しましたが、あなたが提案する最初のソリューションはそうです有難うございます!! – Alex

関連する問題