2016-04-20 2 views
0

私は姓とLinqを使用してユーザーリストをフィルタリングしようとしています。私は何時間も努力してきましたが、何か結果が返ってこない理由を誰かが理解できるように助けてくれると思われるいくつかの投稿を見てきました。Linqを使用してオブジェクトを含むリストとフィルタが含まれています

私は、Listに格納されているいくつかのプロパティ(FirstName、姓など)を持つオブジェクトUsersを持っています。私はその後、Linqステートメントによって入力されたフィルタリングされたリストを持っています。

List<User> FilteredUsers = new List<User>(); 
FilteredUsers.AddRange(AllUsers.Where(i => i.Surname.Contains("jones"))); 

これは何も結果を返していません。あなたは大文字小文字を区別しないフィルタリング(例えば"Jones""jOnes"が一致している必要があります)したい場合は、私もここに私の作業コード(ケース非感受性を追加することが)だ

List<User> FilteredUsers = AllUsers 
    .Where(user => 
     user.Surname.IndexOf("jones", StringComparison.OrdinalIgnoreCase) >= 0)) 
    .ToList(); 
+0

whatsあなたのユーザー..その機能していない人の例を挙げてください。 – BugFinder

+3

'' Surnace'の "jones"のユーザーが実際に存在し、 "Jones"でないことを確認しましたか? – haim770

+0

@ haim770として - 大文字と小文字の区別の問題です。 – rinukkusu

答えて

0

それでした大文字小文字の区別の問題そんな単純な間違い!ありがとうございました。

1

を試してみましたが、私はしないでくださいあなたの問題が何であるかを見てください。必要なものはすべてusingです。リストは正しく初期化されますか(デバッグのためにコンテンツを出力しますか?)

using System; 
using System.Linq; 
using System.Collections.Generic; 

public class User { 
    public String Surname {get;set;} 
} 

static class Prog { 
    static void Main() { 
     List<User> AllUsers = new List<User>(); 
     AllUsers.Add(new User(){Surname="jones"}); 
     AllUsers.Add(new User(){Surname="meyer"}); 
     AllUsers.Add(new User(){Surname="blackjones"}); 
     AllUsers.Add(new User(){Surname="Jones"}); 
     AllUsers.Add(new User(){Surname="Jonesmith"}); 
     AllUsers.Add(new User(){Surname="ajonesee"}); 

     List<User> FilteredUsers = new List<User>(); 
     FilteredUsers.AddRange(AllUsers.Where(i => i.Surname.ToLower().Contains("jones"))); 
     foreach (User u in FilteredUsers) { 
      Console.WriteLine(u.Surname); 
     } 
    } 
} 

出力:

jones 
blackjones 
Jones 
Jonesmith 
ajonesee 

しかし、あなたが最初に空FilteredUsersリストを作成し、直接割り当てるので結果を代わりに追加し、なぜ私が疑問に思う:haim770が述べたように

List<User> FilteredUsers = AllUsers.Where(i => i.Surname.ToLower().Contains("jones")); 
0

List<User> FilteredUsers = new List<User>(); 
FilteredUsers.AddRange(AllUsers.FindAll(i => i.Surname.Contains("jones"))); 
関連する問題