MongoDB驱动程序2.10.2
_query.Where(x => list.Contains(x.Country.ToLower())).ToList();
不支持的筛选器:包含(值(System.Collections.Generic.List`1[System.String]((.
如何在linq查询中使用contains和ToLower?
使用linq-afaik是无法做到这一点的。为了获得所需的结果,您需要生成以下聚合管道。
db.collection.aggregate([
{
$match: {
$expr: {
$in: [{ $toLower: '$Country' }, ['canada', 'mongolia']]
}
}
}
])
测试程序:
using MongoDB.Driver;
using MongoDB.Entities;
using MongoDB.Entities.Core;
using System.Linq;
namespace StackOverFlow
{
public class User : Entity
{
public string Country { get; set; }
}
public static class Program
{
private static void Main()
{
new DB("test");
new User
{
Country = "Mongolia"
}.Save();
var pipeline = new Template<User>(@"
[
{
$match: {
$expr: {
$in: [{ $toLower: '$<Country>' }, [<country_list>]]
}
}
}
]"
)
.Path(u => u.Country)
.Tag("country_list", "'canada', 'mongolia'");
var result = DB.Aggregate(pipeline).ToList();
}
}
}