使用Lambda表达式查询MongoDB的id列表

本文关键字:id 列表 MongoDB 查询 Lambda 表达式 使用 | 更新日期: 2023-09-27 18:13:05

我希望有人能帮助我:

我正在使用一个接口来访问我的数据,查找方法是:

public IQueryable<T> Find<T>(Expression<Func<T, bool>> expression) where T : class, new()
    {
        return (IQueryable<T>) _db.GetCollection<T>(typeof(T).Name, WriteConcern.Acknowledged).AsQueryable().Where(expression);
    }

我试图建立一个表达式来获取所有的objectid列表。

类似:r => r.id.ContainsAny(List_Of_IDs);//List_Of_IDs的类型为:List

我也试过:R => R。ContainsAny(new[] {id1, id2, id3})//其中id1, id2, id3为ObjectId类型

但是我得到一个错误,ContainsAny不支持这个参数。

我希望复制SQL中IN语句的功能。我的目标是,我希望用户集合包含一个产品列表作为ObjectIds列表,然后我想查询产品集合并获取用户的产品id列表中的所有文档。

这可能吗?有人知道我哪里做错了吗?

非常感谢您的帮助!史蒂夫。

BTW:这里是我发送表达式到存储库方法的地方:

public static List<product> getByIDlist(List<ObjectId> IDs)
    {
        return (List<product>)repo.Find<product>(r => r.id.ContainsAny(IDs));       
    }

使用Lambda表达式查询MongoDB的id列表

.ContainsAny()仅用于数组字段。因此,如果您的.id是数组类型,则可以使用它。

对于您的情况,您正在寻找.Contains().In():

public static List<product> getByIDlist(List<ObjectId> IDs)
{
    return (List<product>) repo.Find<product>(r => IDs.Contains(r.id);       
}

恰好等于:

public static List<product> getByIDlist(List<ObjectId> IDs)
{
    return (List<product>) repo.Find<product>(r => r.id.In(IDs));       
}