2016-12-22 9 views
0

ここでは技術的な問題が少しあります。メモリ内のデータをデータベースのデータと交差させる方法

私はUser型のオブジェクトを含むリストを持っています。

ここで、linqを使用して特定の操作を実行する必要があります。ここでは、2つの異なるテーブルからのデータが、固有のユーザー名とIDの組み合わせと一致する必要があります。この種の

何か(これは正しい実装ではありません)

私はかなりいつか今のところ、この実装に貼り付けています。

実際には、プリミティブ型でなければならないので、ここではaUser.Contains()は使用できません。

誰かがこれを手伝ってくれますか?

IList<User> aUser = GetUser(); // this is a cached data 

    class User 

    { 

    string Username; 

    Guid id; 

    } 

    data = (from v in _dataContext.UserValues 
    join i in _dataContext.UserItems 
    on v.ItemId equals i.Id 
    where (aUser.Contains(v.Id) && aUser.Contains(i.UserName)) 
    select v); 

おかげ

+0

したがって、プリミティブ値の2つのリストを使用してください。しかし、[this](http://stackoverflow.com/q/26198860/861716)に注意してください! –

答えて

0

次にあなたのwhere句を変更した場合、それが動作するはずです...

where (aUser.Select(v => v.id).Contains(v.Id) 
    && aUser.Select(v => v.Username).Contains(i.UserName)) 

ところであなたはメソッドの構文を使用している場合、あなたは、あなたのLINQを向上させることができます自分で参加する必要はありません。

data = _dataContext.UserValues 
     .Where(v => aUser.Contains(v.Id) 
       && aUser.Contains(v.UserItem.UserName)) 

正確な構文は、モデルの設定方法によって異なります最後にv.UserItems.UserNameが必要な場合がありますが、これを行う方法を確認する必要があります。ご覧のように、コードははるかにクリーンです。

関連する問題