0

単語の先頭でコレクションを検索する必要があります。

Simply collection{ アイヴァン・スミス、アンソニー・クラーク、マイク・シノダ}

ユーザーが「s」を入力すると、{Ivan Smith, Mike Shinoda} を表示する必要があります

この方法は機能するはずですが、機能しません。

     private void SortFriends(object sender, TextChangedEventArgs e) {
          var text = (sender as WatermarkTextBox).Text;
          if (text != string.Empty) {
            text = text.ToLowerInvariant();
            var translatedColl = FriendCollectionTranslated.Where(i => i.FirstName.StartsWith(text) || i.LastName.StartsWith(text) ||
                                                i.FirstNameT.StartsWith(text) ||
                                                i.LastNameT.StartsWith(text));

            var newCollection = ((App)App.Current).CollectionFriends.Where(i => translatedColl.First(n => n.Uid == i.Uid) != null);

            friendsBox.ItemsSource = newCollection;
          }
          else friendsBox.ItemsSource = ((App)App.Current).CollectionFriends;
        }
    public class HumanTranslated {
          public string Uid { get; set; }
          public string FirstName { get; set; }
          public string LastName { get; set; }
          public string FirstNameT { get; set; }//Translit
          public string LastNameT { get; set; }//Translit
          public bool IsChecked { get; set; }
        }
private void PrepareCollection()//Ретранслируем наши данные для быстрого поиска
    {
      foreach (var t in ((App)App.Current).CollectionFriends) {
        var item = new HumanTranslated {
          Uid = t.Uid,
          LastNameT = ToTranslit(t.LastName.ToLowerInvariant()),
          FirstNameT = ToTranslit(t.FirstName.ToLowerInvariant()),
          FirstName = t.FirstName.ToLowerInvariant(),
          LastName = t.LastName.ToLowerInvariant()
        };
        FriendCollectionTranslated.Add(item);
      }
    }
public class Human {
          public string Uid { get; set; }
          public string FirstName { get; set; }
          public string LastName { get; set; }
          public bool IsChecked { get; set; }
        }
4

1 に答える 1

2

ラムダステートメントの各メンバーに同じ .ToLowerInvariant() 呼び出しを追加します。

var translatedColl = FriendCollectionTranslated.Where(
                      i => i.FirstName.ToLowerInvariant().StartsWith(text) ||
                           i.LastName.ToLowerInvariant().StartsWith(text) || 
                           i.FirstNameT.ToLowerInvariant().StartsWith(text) || 
                           i.LastNameT.ToLowerInvariant().StartsWith(text)); 

さらに良いことに、 StringComparison.InvariantCultureIgnoreCase を使用してください

var translatedColl = FriendCollectionTranslated.Where(
              i => i.FirstName.StartsWith(text,StringComparison.InvariantCultureIgnoreCase) ||
                   i.LastName.StartsWith(text,StringComparison.InvariantCultureIgnoreCase) || 
                   i.FirstNameT.StartsWith(text,StringComparison.InvariantCultureIgnoreCase) || 
                   i.LastNameT.StartsWith(text, StringComparison.InvariantCultureIgnoreCase)); 

次に、テキスト変数から ToLowerInvariant() 呼び出しを削除できます。

于 2012-08-11T14:21:32.593 に答える