Linq 检索包含id的数据

Linq 检索包含id的数据,linq,ravendb,Linq,Ravendb,Raven DB给了我这个消息 不支持的方法:包含 对于此代码: using (var d = DataLayer.RavenDB.d.OpenSession()) { foos = d.Query<Foo>().Where(foo => ids.Contains(foo.Id)).Skip(i * 10).Take(10).ToList(); } 使用(var d=DataLayer.RavenDB.d.OpenSession()) { foo

Raven DB给了我这个消息

不支持的方法:包含

对于此代码:

 using (var d = DataLayer.RavenDB.d.OpenSession())
    {
      foos = d.Query<Foo>().Where(foo => ids.Contains(foo.Id)).Skip(i * 10).Take(10).ToList();
    }
使用(var d=DataLayer.RavenDB.d.OpenSession())
{
foos=d.Query().Where(foo=>ids.Contains(foo.Id)).Skip(i*10.Take(10.ToList();
}

如何检索我的列表
foos

看起来您正在尝试按id查询多个文档。Raven中不建议按id查询。而是加载它们。存在接受多个ID的重载

foos = session.Load<Foo>(ids);

foos=session.Load(id);

如果这是其他属性,而不是Id,则应使用(列表)中的
item.In,而不是
list.Contains(item)

看起来您正在尝试按Id查询多个文档。在Raven中不建议按Id查询。而是加载它们。存在接受多个ID的重载

foos = session.Load<Foo>(ids);

foos=session.Load(id);

如果这是其他属性,而不是Id,则可以使用
item.In(list)
而不是
list.Contains(item)

如果要根据Id列表加载文档,请使用Matt建议的解决方案,性能方面的加载()是最好的方法

但是,如果您仍然希望使用查询(使用一些where contiion)获得它,请更改如下代码

using (var d = DataLayer.RavenDB.d.OpenSession())
    {
         foos = d.Query<Foo>()
                 .Where(foo => foo.Id.In<string>(ids))
                 .Skip(i * 10)
                 .Take(10).ToList();
    }
使用(var d=DataLayer.RavenDB.d.OpenSession())
{
foos=d.Query()
.Where(foo=>foo.Id.In(Id))
.跳过(i*10)
.采取(10)措施;
}

如果要根据ID列表加载文档,请使用Matt建议的解决方案,performance wise load()是最佳方法

但是,如果您仍然希望使用查询(使用一些where contiion)获得它,请更改如下代码

using (var d = DataLayer.RavenDB.d.OpenSession())
    {
         foos = d.Query<Foo>()
                 .Where(foo => foo.Id.In<string>(ids))
                 .Skip(i * 10)
                 .Take(10).ToList();
    }
使用(var d=DataLayer.RavenDB.d.OpenSession())
{
foos=d.Query()
.Where(foo=>foo.Id.In(Id))
.跳过(i*10)
.采取(10)措施;
}

您知道它是否会在其查询后的查询中过滤不需要的元素吗?如果这是您所要求的,则查询过滤将在服务器端进行。您知道它是否会在其查询后的查询中过滤不需要的元素吗?如果这是您所要求的,则查询过滤将在服务器端进行。