2016-08-29 30 views
1

在我的ASP.NET Core MVC应用程序中,我在以下引用其他LINQ查询的LINQ查询中遇到了上述错误。为了简单起见,我在这里简短地修改了代码,因为实际的查询太长而且很复杂。 问题:可能导致错误的原因是什么以及我应该在哪里寻找进一步调试问题?如果有帮助,错误的详细信息如下所示。System.Linq.Expressions - 由于对象的当前状态,操作无效

视图模型

public class MyViewModel 
{ 
    public string Prop1 { get; set; } 
    public int Prop2 { get; set; } 
} 

控制器

public ActionResult Index() 
{ 
    var vm = (from q5 in LINQ_Qry5 
      join q4 in LINQ_Qry4 on q5.SomeID equals q4.SomeID 
      select new MyViewModel { Prop1= q5.property1, Prop2 = q4.property2}).ToList(); 
      return View(vm); 
} 

错误详细信息

Message=Operation is not valid due to the current state of the object. 
    Source=System.Linq.Expressions 
    StackTrace: 
     at System.Linq.Expressions.MethodCallExpression2.GetArgument(Int32 index) 
     at System.Dynamic.Utils.ListArgumentProvider.get_Item(Int32 index) 
     at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.QueryFlattener.Flatten(MethodCallExpression methodCallExpression) 
     at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.OptimizeJoinClause(JoinClause joinClause, QueryModel queryModel, Int32 index, Action baseVisitAction, MethodInfo operatorToFlatten, Boolean outerJoin) 
     at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitJoinClause(JoinClause joinClause, QueryModel queryModel, Int32 index) 
     at Remotion.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection`1 bodyClauses, QueryModel queryModel) 
     at Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel(QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryModelVisitor.VisitQueryModel(QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.RelationalEntityQueryableExpressionVisitor.VisitSubQuery(SubQueryExpression expression) 
     at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.Visit(Expression node) 
     at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.ReplaceClauseReferences(Expression expression, IQuerySource querySource, Boolean inProjection) 
     at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.CompileMainFromClauseExpression(MainFromClause mainFromClause, QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel) 
     at Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel(QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitQueryModel(QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryModelVisitor.VisitQueryModel(QueryModel queryModel) 
     at Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.CreateQueryExecutor[TResult](QueryModel queryModel) 
    --- End of stack trace from previous location where exception was thrown --- 
     at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
+0

这可能是因为控制的大量而产生的模型视图处理。 http://stackoverflow.com/questions/8832470/operation-is-not-valid-d-to-the-current-state-of-the-object-error-during-pos –

+0

不确定它是否有必要,但你的'join'没有后面的'on'子句。 – Pat

+0

@Pat这只是一个错字。谢谢指出 - 我纠正了它。但错误仍然存​​在。 – nam

回答

0
var vm = (from q5 in LINQ_Qry5 
      join q4 in LINQ_Qry4 on q5.SomeID equals q4.SomeID 
      select new MyViewModel() { Prop1= q5.property1, prop2 = q4.property2}).ToList(); 
      return View(vm); 
+0

这是我的控制器正在做的事情。 – nam

1

我打算把这个作为一个评论,但它说太多的字符。

不管怎么说,从我的谷歌对这个错误搜索,似乎问题出在你的变量是中的任何一个(或一些)。

确认的几件事情:

  1. join没有返回null或空序列
  2. property1q5property2q4存在,并且不为空
  3. 也许也使当vm为空或空时,确定View(vm)不是问题。

一些链接我检查了:

UpdateException: Operation is not valid due to...

MonoTouch & LINQ - Operation is not valid due to the current state of the object

+0

谢谢你分享你的想法。 q5和q4是引用其他LINQ查询的LINQ查询,LINQ查询又引用了其他LINQ查询。让我检查某处是否导致null。也感谢您提供相关链接,因为这些链接也会说明错误的可能原因。 – nam

相关问题