2016-08-03 8 views
0

リポジトリパターンの複数のセレクタ

var tmp = unitOfWork.Repository<User>().Queryable(); 

私はテーブルを照会し、をACCOUNTIDアカウントを復旧したいが長い:

result = a.Any(e => e.AccountId == AccountId); 

これは、AccountIdのアカウントの記録を私に提供します。

また、アカウントテーブルにリンクされた電子メールというテーブルがあります。だから私は今、次のように上記のクエリを更新したい:

EMAILIDが長い
result = a.Any(e => 
    e.AccountId == AccountId && 
    e.Email.EmailID == EmailID 
); 

。これで、特定のユーザーアカウントの特定の電子メールが取得されるはずです。

私は何を得ることである:

Operator '&&' cannot be applied to operands of type 'bool' and 'User' 
+0

質問を少し言い換えることができますか?私は理解していない1)どのような "見て、レコードが存在するかどうかを見ているTable1とTable2は、基準が一致する"手段; 2)2番目の式の 'a'は最初の' tmp'と何が関係していますか? 'a'は' IQueryable 'ですか? 3) 'Table2'は' Table1'内のコレクションのようですか? – Groo

+0

エンティティを見ることができますか(それは冗談ではありませんでした)? –

+0

私はあなたが必要とは思わない。テーブルユーザは主キーAccountIdをlongとして持っていますが、テーブルEmailはこのフィールドへのAccountIdというリンクを持ち、メールIDとも呼ばれる主キーを持ちます。したがって、Iqueryableインターフェイスはこれらのフィールドを比較しています。 – gilesrpa

答えて

0

に適用されます私は、私は次のように使用している場合、それは私のために働くことがわかりました。

Result = searchQuery.Any(e => 
        e.AccountId == AccountId && 
        e.Email.Any(f => f.Id == EmailId); 
0

それは正確に何をしたい明確ではありませんが、

var tmp = unitOfWork.Repository<User>().Queryable(); 

はあなたがWhere条件を適用することができた上IQueryable<User>を与える必要がありますが、あなたは結果を得るでしょうUserコレクションまたはオブジェクトです。

unitOfWork.Repository<User>().Queryable().Where(e => 
    e.AccountId == AccountId && 
    e.Email.EmailID == EmailID 
); 

あなたがEmailをしたい場合は、上記のEmailUserを持つオブジェクトをロードする必要がありますいずれか、またはあなたの条件が unitOfWork.Repository<Email>().Queryable();

関連する問題