LINQ不区分大小写

时间:2017-07-21 14:11:59

标签: c# linq

我有一个Linq查询,用于搜索句子中的特定单词。但是我希望这个特定的单词不区分大小写。这样您就可以搜索Actionaction

我的Linq查询如下所示:

var bookFilter = new List<Book> {
  new Book { Title = "LINQ in Action" },
  new Book { Title = "LINQ for Fun" },
  new Book { Title = "Extreme LINQ" } };

var titles = 
    from booksss in bookFilter
    where string.Equals(booksss.Title, 
                       "Action",
                       StringComparison.InvariantCultureIgnoreCase)           
    select booksss.Title;

ObjectDumper.Write(titles);

但是什么都没有回来?

2 个答案:

答案 0 :(得分:4)

您想要检查Title 是否包含字符串。但是,Contains本身没有带有StringComparison参数的重载,但您可以轻松地使用IndexOf

  var bookFilter = new List<Book>() {
    new Book { Title = "LINQ in Action" },
    new Book { Title = "LINQ for Fun" },
    new Book { Title = "Extreme LINQ" } };

  ...

  var titles = bookFilter
    .Select(book => book.Title)
    .Where(title => title
       .IndexOf("Action", StringComparison.InvariantCultureIgnoreCase) >= 0);

答案 1 :(得分:1)

如果您的数据源实际上是实体框架,那么只需将其添加为答案,因为它无法理解如何处理Contains。您有两种选择:

  1. 使您的数据库不区分大小写。在SQL Server中,这意味着使用一个不区分大小写的排序规则。
  2. ToLowerToUpper结合使用(如果您是反叛者,则使用//Make sure the search value is lower case var search = "Action".ToLower(); var titles = from booksss in bookFilter where booksss.Title.ToLower().Contains(search) select booksss.Title; ):

    $app->json()