Mongodb,linq驱动程序.如何使用变量或语句构造包含
本文关键字:语句 包含 变量 何使用 linq 驱动程序 Mongodb | 更新日期: 2023-09-27 18:36:23
我正在使用适用于C#的Mongo LINQ驱动程序,效果很好。
对很多属性进行排序,但这里有一个我无法解决的问题,它可能很简单。
var identifierList = new []{"10", "20", "30"};
var newList = list.Where(x => identifierList.Contains(x.Identifier));
This is NOT supported ...
所以我可以做这样的事情:
var newList = list.Where(x => x.Identifier == "10" || x.Identifier == "20" || x.Identifier == "30");
但是由于列表是可变的...我如何构建上述内容?还是有更好的选择?
list
的类型为 IQueryable<MyCustomClass>
有关信息...这被用作许多属性的过滤器。在SQL中,我可以有一个父子关系>子关系。但是由于我不能作为主 ID 的父级,我需要取出所有 ID,然后像这样构造它。
希望这是有道理的。如果需要,我会解释更多。
回答我自己的问题...Mongo Sharp LINQ 驱动程序有一个名为"In"的扩展方法,它完全符合我的需要。
然而,他们已经在 1.5 中实现了它,所以我们可以使用旧的方式,例如: https://jira.mongodb.org/browse/CSHARP-462
var list = new []{"10", "10"};
search.Where(x => list.Contains(x.Id));
但是 1.5 版包还没有在 nuget 上。
但是,这应该适用于"In"扩展,这对于mongo-csharp-driver来说是一个特别的惊喜。
search.Where(x => x.In(list));
var identifierList = new []{"10", "20", "30"};
var newList = list.ToList().Where(x => identifierList.Contains(x.Identifier));
您只需要使用 List 而不是 Ienumerable(通过使用 .ToList())
如果它不起作用,请添加您的列表类型