【问题标题】:c# linq if item is in list and get matching items from listc# linq 如果项目在列表中并从列表中获取匹配项目
【发布时间】:2019-10-13 04:36:40
【问题描述】:

如果我的列表包含:英国猫、法国猫、日本狗、西班牙狗

我有一个物品:狗

我不仅想查看列表是否包含我的项目,而且返回匹配的项目,所以我希望:日本狗,西班牙狗

我已经使用以下代码查看该项目是否在列表中:

if (myList.Any(myItem.ToLower().Contains)) { }

【问题讨论】:

  • 试试这个:var movies = _db.Movies.Where(p => p.Genres.Intersect(listOfGenres).Any()); stackoverflow.com/questions/10667675/…
  • 如果它是一个字符串列表,那么我认为List<string> results = myList.Where(item => item.ToLower.Contains("dog"); 可以解决问题。

标签: c# list linq contains


【解决方案1】:

我喜欢使用正则表达式并为狗这样做:

var animals = new List<string>() 
               { "japanese dog", "spanish dog", "english cat", "french cat" };

var dogs = animals.Where(type => Regex.IsMatch(type, "dog", RegexOptions.IgnoreCase))
                  .ToList();

// Returns {"japanese dog",  "spanish dog" } 

您可能会问为什么使用正则表达式,因为它灵活而强大……让我来展示一下:

让我们通过使用 ToLookup 扩展和正则表达式对它们进行排序来做一些更高级的 linq 工作,例如

var sortedbyDogs 
            = animals.ToLookup(type => Regex.IsMatch(type, "dog", RegexOptions.IgnoreCase));

在内存中是这样分组的:

然后只提取猫之类的

var cats = sortedbyDogs[false].ToList()

然后为狗传递true。


但是为什么用布尔值分割它,如果有更多的动物呢?让我们在列表中添加一只狐猴,例如 … "french cat", "Columbian Lemur" }; 我们这样做:

var sorted = animals.ToLookup(type => Regex.Match(type, 
                                                  "(dog|cat|lemur)", 
                                                  RegexOptions.IgnoreCase).Value);

然后获取我们的猫,代码如下:

sorted["cat"].ToList()

【讨论】:

    【解决方案2】:
    var myList = new List<string>() { " japanese dog", "spanish dog", "english cat", "french cat" };
    var dog = "Dog";
    
    if (myList.Any(t=>t.Contains(dog.ToLower()))) {
        var result = myList.Where(t => t.Contains(dog.ToLower())).ToList();
    }
    

    【讨论】:

      【解决方案3】:

      我认为您正在寻找类似的东西,使用 where 子句:

      string filter = "dog";
      IEnumerable<string> filteredItems = myList.Where(m => m.ToLower().Contains(filter.ToLower()));
      

      【讨论】:

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