带有字符串数组的 Linq 包含
Linq with String Array Contains
我有一个项目字符串数组和一个数据库对象列表,我想从中执行 select 查询
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();
}
我想要数组中所有带有名称的标签
我必须使用 2 个选项我想检查标记名是否包含任何关键字 &
如果搜索的是精确短语,那么我想检查任何标记名 == 任何关键字
但是对于这个查询我收到了错误
Local sequence cannot be used in LINQ to SQL implementations of query
operators except the Contains operator.
如何解决?
试试这个查询
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'
尝试用 contains
替换 Any
List<int> _tagIds = (from item in dbContext.Tags
where target_terms.Contains(w => item.TagName.Contains(w))
select item.TagId).ToList();
多次遇到这个问题后,我创建了一个 nuget package 来解决这个常见问题。
使用 NinjaNye.SearchExtensions 您可以执行以下操作:
var _tagIds = dbContext.Tags.Search(t => t.TagName)
.Containing(keywords)
.Select(t => t.TagId)
.ToList();
如果需要,您还可以搜索在 属性.
中找到匹配项的多个属性和 return 记录
var _tagIds = dbContext.Tags.Search(t => t.TagName, t => t.Description)
.Containing(keywords)
.Select(t => t.TagId)
.ToList();
希望对您有所帮助
我有一个项目字符串数组和一个数据库对象列表,我想从中执行 select 查询
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();
}
我想要数组中所有带有名称的标签
我必须使用 2 个选项我想检查标记名是否包含任何关键字 & 如果搜索的是精确短语,那么我想检查任何标记名 == 任何关键字
但是对于这个查询我收到了错误
Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.
如何解决?
试试这个查询
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'
尝试用 contains
Any
List<int> _tagIds = (from item in dbContext.Tags
where target_terms.Contains(w => item.TagName.Contains(w))
select item.TagId).ToList();
多次遇到这个问题后,我创建了一个 nuget package 来解决这个常见问题。
使用 NinjaNye.SearchExtensions 您可以执行以下操作:
var _tagIds = dbContext.Tags.Search(t => t.TagName)
.Containing(keywords)
.Select(t => t.TagId)
.ToList();
如果需要,您还可以搜索在 属性.
中找到匹配项的多个属性和 return 记录var _tagIds = dbContext.Tags.Search(t => t.TagName, t => t.Description)
.Containing(keywords)
.Select(t => t.TagId)
.ToList();
希望对您有所帮助