C# 如何在Couchbase IQueryable执行后应用OData$select

C# 如何在Couchbase IQueryable执行后应用OData$select,c#,odata,asp.net-core-webapi,couchbase,C#,Odata,Asp.net Core Webapi,Couchbase,我正在尝试在web api中实现OData功能,该api与Couchbase bucket耦合,使用实体数据模型(EDM)的,端点在.NET Core 3.1中,并使用以下软件包: <PackageReference Include="CouchbaseNetClient" Version="2.7.16" /> <PackageReference Include="Linq2Couchbase" Version="1.4.2" /> <PackageReferen

我正在尝试在web api中实现OData功能,该api与Couchbase bucket耦合,使用实体数据模型(EDM)的,端点在.NET Core 3.1中,并使用以下软件包:

<PackageReference Include="CouchbaseNetClient" Version="2.7.16" />
<PackageReference Include="Linq2Couchbase" Version="1.4.2" />
<PackageReference Include="Microsoft.AspNetCore.OData" Version="7.4.0-beta" />
在这里,$select确实起作用,但它的缺点是$top和$skip不会作为限制和偏移量在数据库上运行

// localhost:5000/odata/Client?$select=Address/Street,Name
[EnableQuery]
public Task<IEnumerable<Client>> Get()
{
    return this.clientRepository.GetAll().ExecuteAsync();
}
//localhost:5000/odata/Client?$select=地址/街道,名称
[启用查询]
公共任务Get()
{
返回此.clientRepository.GetAll().ExecuteAsync();
}
我的解决方案是将$top和$skip应用于Couchbase查询,或者根本不使用$select

让$select工作的正确方法是什么?i、 e.不要将$select应用于
IQueryable
,而只应用于随后检索的结果


有没有一起使用Couchbase和OData的.NET示例?

您介意将完整示例发布到GitHub或其他地方吗?我想尝试解决这个问题,看看NotImplementedException在哪里。也许我可以为Linq2 Couchbase处理一个pull请求。另外,这可能不是您想要的,但我知道CData有一个用于Couchbase的OData API产品-谢谢。我在上面放了一个示例项目,这是一个非常好的示例,谢谢。我不确定这是否是一个bug,或者只是还不受支持,但我在这里打开了一个关于Linq2Couchbase回购的问题:您介意在GitHub上发布一个完整的示例吗?我想尝试解决这个问题,看看NotImplementedException在哪里。也许我可以为Linq2 Couchbase处理一个pull请求。另外,这可能不是您想要的,但我知道CData有一个用于Couchbase的OData API产品-谢谢。我在上面放了一个示例项目,这是一个非常好的示例,谢谢。我不确定这是一个bug,还是还不受支持,但我在Linq2Couchbase回购协议上发现了一个问题:
// Couchbase.Linq.CouchbaseQueryException: An error occurred executing the N1QL query.  See the inner exception for details.
//  ---> System.NotImplementedException: The method or operation is not implemented.
//    at Microsoft.AspNet.OData.Query.Expressions.SelectExpandWrapperConverter.ReadJson(
//    Couchbase.N1QL.QueryClient.ExecuteQueryAsync[T](IQueryRequest queryRequest, CancellationToken cancellationToken)
// localhost:5000/odata/Client?$select=Address/Street,Name
[EnableQuery]
public Task<IEnumerable<Client>> Get()
{
    return this.clientRepository.GetAll().ExecuteAsync();
}