【问题标题】:Searching in a List with Linq使用 Linq 在列表中搜索
【发布时间】:2020-08-29 20:05:45
【问题描述】:

我正在尝试搜索在对象(标题)的字段中包含特定字符串的对象。之后,我想用包含该字符串的对象填充一个列表。我的清单没有填满。

    public void SearchMovies(String searckhQuery) {
    Console.WriteLine(searckhQuery);
    if(searckhQuery == null) {
        Console.WriteLine("yesbaby");
    } else {
        Console.WriteLine("itworks");
        List<MovieViewModel> searchMovieList = new List<MovieViewModel>();
        movieList.Where(m => m.Title.Contains(searckhQuery));
        movieList.Select(m => searchMovieList);
        movieList = searchMovieList;
    }
}

提前感谢您的帮助!

【问题讨论】:

  • 这是因为您没有分配每个调用的结果。 var searchMovieList = movieList.Where(m =&gt; /*condition here*/).Select(m =&gt; new MovieViewModel{}).ToList();
  • 另外searckhQuery 包含什么?你真的想做Title.Contains(searchQuery) 吗?如果标题包含对字符串 searchQuery 的部分完全匹配,那将返回 true。示例:"Dawn of the Dead" 标题将匹配 "Dead" 但不匹配 "Dead and Dawn"

标签: c# list linq filter


【解决方案1】:

您需要了解 linq 查询的工作原理。 WhereSelect 返回一个新集合。它不会过滤掉相同的列表对象。语法是:

searchMovieList = movieList.Where(m => m.Title.Contains(searckhQuery)).ToList();

如果MovieViewModelmovieList 是不同类型的集合,那么我们将需要使用Select 并根据需要分配属性,例如:

searchMovieList = movieList.Where(m => m.Title.Contains(searckhQuery))
                          .Select(m => new MovieViewModel() 
                                       {
                                          Title = m.Title,
                                          .....
                                       }).ToList();

如果两者都是同一类型,那么它可以更简单:

movieList = movieList.Where(m => m.Title.Contains(searckhQuery)).ToList();

【讨论】:

  • @JonathanClaeskens 很高兴它有帮助:)
【解决方案2】:

WhereSelect 不是操作 List&lt;&gt; 的方法。他们在任何IEnumerable&lt;&gt; 上工作,List&lt;&gt; 就是其中之一,但他们返回一个带有结果的新序列。您从不使用该返回值,因此您的列表保持为空。

很难从不这样做的 sn-p 中说出你真正想要什么,但我认为你正在寻找这个:

var searchMovieList = movieList.Where(m => m.Title.Contains(searckhQuery)).ToList();

if(!searchMovieList.Any())
{
    searchMovieList = movieList;
}

【讨论】:

    【解决方案3】:

    您可以执行以下操作: var searchMovieList = movieList.Where(m =&gt; m.Title.Contains(searchQuery).toList()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多