データベースからユーザーのリストをフィルタリングしようとしています。
この LINQ to Entity コマンドを実行すると、期待どおりに動作します。にあるものでフィルタリングされたすべてのユーザーを返しますtxtFilterBy_UserName
。
(db テーブルに直接アクセスしていることに注意してください。フィルタリングするフィールドもいくつかありますが、この例ではユーザー名のみを含めています)
users = db.Users
.Where(u => u.IsActive == true &&
u.UserName.ToLower()
.Contains((txtFilterBy_UserName.Value.Length > 0) ?
u.UserName.ToLower() :
txtFilterBy_UserName.Value.ToLower()))
.ToList();
しかし...状況によっては、フィルタリングする前に User コレクション ( _users
) を既に作成しており、これを実行できると期待していました。
users = _users.Where(u => u.IsActive == true &&
u.UserName.ToLower()
.Contains((txtFilterBy_UserName.Value.Length > 0) ?
u.UserName.ToLower() :
txtFilterBy_UserName.Value.ToLower()))
.ToList();
しかし、このメソッドは常に 0 ユーザーを返します。誰かが私が間違っていることを教えてもらえますか、またはユーザー コレクションをフィルタリングするこのメソッドが機能しない理由を教えてください。
私のDBに100人のユーザーがいて、そのうち6人のユーザーがユーザー名に「john」という文字を持っているとしましょう。DB に直接クエリを実行すると、6 人のユーザーが返されます。ユーザー コレクション オブジェクトが既に (100 ユーザーで) 読み込まれていて、コレクションをフィルター処理しようとすると、0 ユーザーが返されます