MongoDB-linq中包含不支持的筛选器.如何在linq查询中使用contains和ToLower



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();
        }
    }
}

最新更新