2016-05-30 8 views
4
public JsonResult SearchUser(string term_, int[] assetOwnerIdList_) 
    { 
     term_ = term_.Trim(); 

     var userMatches = (from user in _db.Query<User>() 
          where user.Name.Contains(term_) || user.Email.Contains(term_) 
          select new ItemLabelId { Label = user.Email, Id = user.UserId }).ToList().Any(); 

     return Json(userMatches, JsonRequestBehavior.AllowGet); 
    } 

である私のコードですべてのユーザーを削除し、私は、結果をフィルタリングしたいし、それらを削除するなどResult.RemoveAll.Where(user.UserId in assetOwnerIdList_)LINQユーザーuseridが<code>assetOwnerIdList_</code>リストに含まれている場合はユーザーIDはだからここにリスト

おかげ

答えて

6

シンプル:

Result.RemoveAll(x => assetOwnerIdList_.Contains(x.UserId)); 

あなたは、あなたのクエリで直接useMatchesをフィルタリングする場合:

これは、クエリプロバイダがcontainsメソッド(IN変換)をサポートしている場合のみ機能し、それ以外の場合は上記のメソッドを使用します。

var userMatches = (from user in _db.Query<User>() 
        where user.Name.Contains(term_) || user.Email.Contains(term_) 
        && assetOwnerIdList_.Contains(user.UserId) == false 
        select new ItemLabelId { Label = user.Email, Id = user.UserId }).ToList().Any(); 
+0

おかげで、 はなるように上記のクエリでそれをインクルードする方法はありますすぐに結果をフィルタリングできますか? – simpleProgrammer

+0

@simpleProgrammer私はすでにそれを含む編集を書いていました。 – user3185569

3

ユーザIDがリストにあるか、ちょうどこのように、フィルタを使用していないかどうかをチェックする必要はありません:

var UserIdList = assetOwnerIdList_.ToList(); 

var list = userMatches .Where(x => !UserIdList.Contains(x.UserId)); 

return list; 
+0

これは、UserIdのリストではなく、1つのUserIdに対してのみ機能します。しかし、 'AssetUserId'はすでにリストである(もしそうでなければ、' .ToList() 'で事前に変換する)、'!AssetUserIdList.Any(x.UserId) 'を' .Where(... ) '節を参照してください。 – Matt

+0

複数のユーザーIDを使用する場合は、最初にユーザーIDのリストを作成し、それを使用してlamdaクエリーを作成します。まだ質問があります。 –

+0

リスト UserIdList =新しいリスト(GetUserIdList()); lists.Where(x => UserIdList.Contains(x.UserId)); –

関連する問題