lambda query to lower in C#
我在lambda查询中遇到tolower()问题。我有这个密码
1 2 3 4 5 | var filterResult = articleList .Where(m => m.Summary .Contains(filteredModel.Keyword) || m.Body.Contains(filteredModel.Keyword) || m.Headline.Contains(filteredModel.Keyword) || m.Title.Contains(filteredModel.Keyword)) .AsQueryable(); |
我需要将tolower()方法添加为sql。例如:
1 2 3 4 5 | var filterResult = articleList .Where(m => m.Summary.toLower() .Contains(filteredModel.Keyword.toLower()) || m.Body.toLower().Contains(filteredModel.Keyword.toLower()) || m.Headline.toLower().Contains(filteredModel.Keyword.toLower()) || m.Title.toLower().Contains(filteredModel.Keyword.toLower())) .AsQueryable(); |
正如上面的代码,lambda不允许使用。我想知道是否还有其他方法可以做到这一点。
1 2 3 4 5 | var keyword = filteredModel.Keyword.ToLower(); var filterResult = articleList.Where(m => m.Summary.ToLowerInvariant().Contains(keyword)); filterResult = filterResult.Where(m => m.Body.ToLower().Contains(keyword)); filterResult = filterResult.Where(m => m.Headline.ToLower().Contains(keyword)); filterResult = filterResult.Where(m => m.Title.ToLower().Contains(keyword)); |
也只是一个提示-如果您转换为小写以进行文化无关的比较,那么您应该使用tolowerinvariant…或者更好地使用toupperinvariant,因为它更可靠。
你也可以用
1 2 3 4 | .Where(m => m.Summary.IndexOf(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) >= 0 || m.Body.IndexOf(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) >= 0 || m.Headline.IndexOf(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) >= 0 || m.Title.IndexOf(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) >= 0 |
我认为应该得到你的LINQ供应商的支持
通过创建一个扩展方法,您可以像这里描述的那样更整洁。
1 2 3 | public static bool Contains(this string source, string toCheck, StringComparison comp) { return source.IndexOf(toCheck, comp) >= 0; } |
所以你可以这样做
1 2 3 4 | .Where(m => m.Summary.Contains(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) || m.Body.Contains(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) || m.Headline.Contains(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) || m.Title.Contains(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) |