使用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));
}
.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));
}