包含字符串数组的Linq
本文关键字:Linq 数组 字符串 包含 | 更新日期: 2023-09-27 18:00:33
我有一个项目的字符串数组&数据库对象的列表,我想从中进行选择查询
List<string> target_terms = new List<string> { "car", "mechanic" }
if (isNotExactPhrase)
{
List<int> _tagIds = (from item in dbContext.Tags
where target_terms.Any(w => item.TagName.Contains(w))
select item.TagId).ToList();
}
我想要数组中所有带有名称的标签
我必须使用两个选项,我想检查标记名是否包含任何关键字&如果搜索的是确切的短语,那么我想检查任何标记名==任何关键字
但对于这个查询,我得到了错误
本地序列不能用于查询的LINQ到SQL实现除Contains运算符之外的运算符。
如何解决这个问题?
尝试此查询
var _tagIds = (from item in dbContext.Tags
where keywords.contains(item.TagName)
select item.TagId).ToList();
没有直接的等价物,但根据模式的不同,有一些方法可以类似地工作。
string.Contains("pattern")相当于LIKE'%pattern%'
string.StartsWith("pattern")相当于LIKE"pattern%"
string.EndsWith("pattern")相当于LIKE'%pattern'
在多次遇到这个问题后,我创建了一个nuget包来解决这个常见问题。
使用NinjaNye.SearchExtensions,您可以执行以下操作:
var _tagIds = dbContext.Tags.Search(t => t.TagName)
.Containing(keywords)
.Select(t => t.TagId)
.ToList();
如果需要,您还可以搜索多个属性,并返回在任一属性中找到匹配项的记录。
var _tagIds = dbContext.Tags.Search(t => t.TagName, t => t.Description)
.Containing(keywords)
.Select(t => t.TagId)
.ToList();
希望这能帮助
尝试用contains
替换Any
List<int> _tagIds = (from item in dbContext.Tags
where target_terms.Contains(w => item.TagName.Contains(w))
select item.TagId).ToList();