我希望有人可以帮助我:
我正在使用界面访问我的数据,Find方法是:
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);
}
我正在尝试构建一个表达式来获取ObjectIds列表中的所有ObjectIds。
像这样的东西: r =&gt; r.id.ContainsAny(LIST_OF_IDS); //其中List_Of_IDs的类型为:List我也尝试过: r =&gt; r.id.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));
}
答案 0 :(得分:0)
.ContainsAny()
is only meant to be used on an array field.。因此,如果.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));
}