C# CRM 2011:类型为';的未处理异常;系统无效操作异常';发生。参考范围'';,但它没有定义

C# CRM 2011:类型为';的未处理异常;系统无效操作异常';发生。参考范围'';,但它没有定义,c#,linq,dynamics-crm-2011,dynamics-crm,C#,Linq,Dynamics Crm 2011,Dynamics Crm,执行此查询时,我收到以下错误消息。如果删除第二个where子句,查询就可以正常工作 代码 (from cl in context.CreateQuery<ContractDetail>() join a in context.CreateQuery<Account>() on cl.CustomerId.Id equals a.AccountId where cl.StateCode.Value == 0 where cl.new_Supporte

执行此查询时,我收到以下错误消息。如果删除第二个where子句,查询就可以正常工作

代码

(from cl in context.CreateQuery<ContractDetail>()
  join a in context.CreateQuery<Account>()
      on cl.CustomerId.Id equals a.AccountId
  where cl.StateCode.Value == 0
  where cl.new_SupportedBy == a.Name
  select cl).ToList();
第二:

where a.Name == "abc"
Linq Pad引发异常

at System.Linq.Expressions.Compiler.VariableBinder.Reference(ParameterExpression node, VariableStorageKind storage)
at System.Linq.Expressions.Compiler.VariableBinder.VisitParameter(ParameterExpression node)
at System.Linq.Expressions.ParameterExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionVisitor.VisitMember(MemberExpression node)
at System.Linq.Expressions.MemberExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionVisitor.VisitMember(MemberExpression node)
at System.Linq.Expressions.MemberExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionVisitor.Visit(ReadOnlyCollection`1 nodes)
at System.Linq.Expressions.Compiler.VariableBinder.VisitLambda[T](Expression`1 node)
at System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.Compiler.LambdaCompiler.Compile(LambdaExpression lambda, DebugInfoGenerator debugInfoGenerator)
at Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateExpressionToValue(Expression exp, ParameterExpression[] parameters)
at Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateExpressionToConditionValue(Expression exp, ParameterExpression[] parameters)
at Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateWhereCondition(BinaryExpression be, FilterExpressionWrapper parentFilter, Func`2 getFilter, Boolean negate)
at Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateWhere(String parameterName, BinaryExpression be, FilterExpressionWrapper parentFilter, Func`2 getFilter, List`1 linkLookups, Boolean negate)
at Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateWhereBoolean(String parameterName, Expression exp, FilterExpressionWrapper parentFilter, Func`2 getFilter, List`1 linkLookups, BinaryExpression parent, Boolean negate)
at Microsoft.Xrm.Sdk.Linq.QueryProvider.GetQueryExpression(Expression expression, Boolean& throwIfSequenceIsEmpty, Boolean& throwIfSequenceNotSingle, Projection& projection, NavigationSource& source, List`1& linkLookups)
at Microsoft.Xrm.Sdk.Linq.QueryProvider.Execute[TElement](Expression expression)
at Microsoft.Xrm.Sdk.Linq.QueryProvider.GetEnumerator[TElement](Expression expression)
at Microsoft.Xrm.Sdk.Linq.Query`1.GetEnumerator()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at UserQuery.RunUserAuthoredQuery() in c:\Users\abc\AppData\Local\Temp\LINQPad\_nmuxfnrq\query_lnnofb.cs:line 34

提前感谢

我已将问题分类如下:

var contractLines = (from cl in context.CreateQuery<ContractDetail>()
  join a in context.CreateQuery<Account>()
  on cl.CustomerId.Id equals a.AccountId                                 
  where cl.StateCode.Value == 0
  select new {cl, a}).ToList();

var collection = new EntityCollection();

foreach (var line in contractLines)
{
    if (line.a.Name == line.cl.dbc_SupportedBy)
    {
        collection.Entities.Add(line.cl);
    }
}
var contractLines=(来自context.CreateQuery()中的cl)
在context.CreateQuery()中加入
在cl.CustomerId.Id上等于a.AccountId
其中cl.StateCode.Value==0
选择新的{cl,a}).ToList();
var collection=new EntityCollection();
foreach(contractLines中的var行)
{
if(line.a.Name==line.cl.dbc_SupportedBy)
{
集合.实体.添加(第cl行);
}
}
我明白,这不是一个完美的解决方案。但由于这个应用程序只运行一次,所以我不介意它是否执行缓慢。但是我仍然很想知道为什么会发生错误,所以我将继续回答这个问题

更新

(from cl in context.CreateQuery<ContractDetail>()
  join a in context.CreateQuery<Account>()
      on cl.CustomerId.Id equals a.AccountId
  where cl.StateCode.Value == 0
  where cl.new_SupportedBy == a.Name
  select cl).ToList();

在没有任何答复的情况下将其开放了六个多月。所以我现在关闭它,因为这个解决方法对我来说很有效,而且为了我的答案接受率也关闭了它:P

也许cl.new\u SupportedBy==a.Name是个问题

不能编写CRM LINQ查询,其中where子句包含比较属性的谓词;即使这些属性是在同一实体实例上定义的


如果删除第一个where子句?您是否也尝试颠倒where子句的顺序?已经尝试过了。尝试将cl.new_suportedby和a.name分别硬编码。有一种简单的方法可以检查CRM LINQ提供程序是否有问题,在每次CreateQuery之后执行ToList(),然后检查它是否工作,现在需要花费时间。我仍在等待:)ToList()速度太慢,出现异常:在中发生“System.OutOfMemoryException”类型的未处理异常