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,然后像这样构造它。

希望这是有道理的。如果需要,我会解释更多。

Mongodb,linq驱动程序.如何使用变量或语句构造包含

回答我自己的问题...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())

如果它不起作用,请添加您的列表类型