C# Linq查询返回空值

tv6aics1  于 2022-12-06  发布在  C#
关注(0)|答案(1)|浏览(240)
public ListExercieseViewModel()
    {
        ListOfItemsSource = new ObservableCollection<Items>();
        ListOfItemsSource.Add(new Items() { MainText="First" , SecondText="Test"});
        ListOfItemsSource.Add(new Items() { MainText="Second" , SecondText="Test"});
        ListOfItemsSource.Add(new Items() { MainText="Third" , SecondText="Test"});
        ListOfItems = ListOfItemsSource.ToList();
        SearchBar = new Command(OnTextChanged);

    }

public string TextChanging
    {
        get
        {
            return _TextChanging;
        }
        set
        {
            if (value != null)
                _TextChanging = value;
        }
    }
    public List<Items> ListOfItems
    {
        get;
        set;
    }
    public ObservableCollection<Items> ListOfItemsSource
    {
        get;
        set;
    }
public class Items : INotifyPropertyChanged
{
    public string _MainText;
    public string _SecondText;
    public string MainText
    {
        get
        { 
            return _MainText; 
        }

        set 
        {
            if (value != null)
                _MainText =  value;
            NotifyPropertyChanged(); 
        }
    }
    public string SecondText
    {
        get => _SecondText;
        set
        {
            if (value != null)
                _SecondText = value;
            NotifyPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

问题就在这里:

public void OnTextChanged()
    {
        if (!String.IsNullOrEmpty(_TextChanging))
            ListOfItems = ListOfItemsSource.Where(x => x.MainText.StartsWith(TextChanging)).ToList();
        else
            ListOfItems = ListOfItemsSource.ToList();
    }

我试着为我的元素做一个过滤器,我用Linq来做,但是我有一个问题
最初,值 在TextChanging =“Th”之后,ListOfItems的计数为0,但我需要筛选此信息以显示“Third”
什么是错的

63lcw9qa

63lcw9qa1#

在注解中,您提到您在搜索框中输入了“th”,并期望与“Third”匹配。如果您调用string.StartsWith时没有任何配置比较的参数,则比较是区分大小写的。因此,“th”不匹配,但“Th”匹配。
解决这个问题最简单的方法是添加一个参数,指定比较应该不区分大小写,例如。

ListOfItems = ListOfItemsSource
  .Where(x => 
    x.MainText
     .StartsWith(
       TextChanging, 
       StringComparison.CurrentCultureIgnoreCase))
  .ToList();

有关可用选项,请参阅此link
或者,您可以在比较之前,将清单中的字串和您要寻找的文字转换成小写。

相关问题