我想对字符串数组进行搜索,并将其与字符串列表中的任何字符串进行比较。例如:
这是数据结构:
{
"CategoryIds": [ "A123", "B456", "C789" ]
}
这是搜索词:
List<string> search = new List<string> { "A123", "C789" };
我正在动态构建搜索查询,因此我已经为开始定义了这些内容:
var builder = Builders<Item>.Filter;
ar filters = Builders<Item>.Filter.Empty;
我尝试了以下所有方法,但均无效果:
使用ElemMatch
filters &= builder.ElemMatch(i => i.CategoryIds, id => search.CategoryIds.Any(i => i.Equals(id)));
使用Intersect
filters &= builder.Where(i => search.CategoryIds.Intersect(i.CategoryIds).Any());
唯一可行的就是这个:
var categoryFilters = new List<FilterDefinition<Item>>();
foreach (string id in search.CategoryIds)
categoryFilters.Add(builder.AnyEq(i => i.CategoryIds, id));
if (categoryFilters.Any())
filters &= builder.Or(categoryFilters);
但是似乎太过分了。有没有更简单的方法可以做到这一点?