Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MongoDB中执行IQueryable请求?_C#_Mongodb_Linq_Mongodb Query_Iqueryable - Fatal编程技术网

C# 如何在MongoDB中执行IQueryable请求?

C# 如何在MongoDB中执行IQueryable请求?,c#,mongodb,linq,mongodb-query,iqueryable,C#,Mongodb,Linq,Mongodb Query,Iqueryable,我正在尝试连接一些基于IQueryable接口的框架,如OData,如果您想知道的话 我当前的问题可以使用以下代码段来描述: var queryable=database.GetCollectionmyItems.AsQueryable; var count1=queryable.Selectx=>x.Order.StateInfo.Count; //var count2=queryable.Selectx=>x.Order.Selectx=>x.StateInfo.Count; 此代码有效,但

我正在尝试连接一些基于IQueryable接口的框架,如OData,如果您想知道的话

我当前的问题可以使用以下代码段来描述:

var queryable=database.GetCollectionmyItems.AsQueryable; var count1=queryable.Selectx=>x.Order.StateInfo.Count; //var count2=queryable.Selectx=>x.Order.Selectx=>x.StateInfo.Count; 此代码有效,但如果取消注释最后一行:

System.ArgumentException: Expression of type 'System.Collections.Generic.IEnumerable`1[MyApp.Common.Models.StateInfo]' 
cannot be used for parameter of type 'System.Linq.IQueryable`1[MyApp.Common.Models.StateInfo]' of method
 'Int32 Count[StateInfo](System.Linq.IQueryable`1[MyApp.Common.Models.StateInfo])' (Parameter 'arg0')
   at System.Dynamic.Utils.ExpressionUtils.ValidateOneArgument(MethodBase method, ExpressionType nodeKind, Expression arguments, ParameterInfo pi, String methodParamName, String argumentParamName, Int32 index)
   at System.Linq.Expressions.Expression.Call(MethodInfo method, Expression arg0)
   at System.Linq.Expressions.MethodCallExpression1.Rewrite(Expression instance, IReadOnlyList`1 args)
   at System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at MongoDB.Driver.Linq.Processors.Transformer.Visit(Expression node)
   at MongoDB.Driver.Linq.Processors.Transformer.Transform(Expression node)
   at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Prepare(Expression expression)
   at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Translate(Expression expression)
   at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken)
   at MongoDB.Driver.Linq.MongoQueryable.CountAsync[TSource](IMongoQueryable`1 source, CancellationToken cancellationToken)
似乎驱动程序试图在内存中执行一些操作,丢弃了整个IQueryable,所以所有后续调用都失败了,比如Select/Where/。。。。带有两个后续Select或Select/Where对的查询会被有效地毒害,并且不能在任何地方使用。例如:

var queryable=database.GetCollectionmyItems.AsQueryable; var count1=queryable.Selectx=>x.Order.Wherex=>x.StateInfo!=空。计数; //System.InvalidOperationException:“{document}.StateInfo不受支持。”
我能怎么办?也许我可以在某个地方报告它?

MongoDB C驱动程序只是部分支持IQueryable,因为使用MongoDB聚合管道实现所有情况太难了

因此,如果版本2.10不支持从另一个选择中选择以及从选择中选择位置,我并不感到惊讶

在当前文档中找不到关于此的任何信息,但在v1文档中:

选择用于从匹配的文档中投影新的结果类型。投影通常必须是最后一个操作,只有少数例外,如Distinct、Max和Min

使用IQueryable仅限于所述的基本方法。
您可以找到IQueryable测试,而我又找不到。选择。选择。

GetCollection返回什么?它是可饮用的吗?那么为什么要使用asquerybel呢?MyItem的顺序是否在单独的表中?MyItems和订单之间的关系是什么?如果它在一个单独的表中,那么如果您自己进行连接,它是否工作?没有表,它是一个mongo文档。下面是我使用的API:好的,现在我明白了。GetCollection是一种返回对Mongo中一个表的访问权限的方法。GetCollection返回对包含MyType记录行的表的访问权。AsQueryable不是IEnumerable的扩展方法,而是MongoCollection的扩展方法。您可以访问MyItems表。订单是MyItems的一部分,还是MyItem有零个或多个订单?在数据库术语中:订单和MyItems之间是否存在一对多或多对多的关系?可能您误解了文档数据库的概念:它们之间没有关系或其他任何关系。文档作为一个整体存储,您可以将其想象为在磁盘上的.JSON文件中序列化JSON数组。您可以访问任何条目,获得整个对象树,没有连接、表和其他内容。唯一的区别是mongo执行查询的速度比使用naive JSON文件实现的速度快。