我的LINQ语句(查询?变量?表达式?)在枚举时抛出异常(.ToList()或foreach)[见下文]。
在大多数环境中。
从VisualStudio 2012运行时不会发生此错误 - 它在实际部署到环境时发生。
在SO上有很多关于这个错误的问题,但除了那些一直之外的其他例外情况之外我不会这样做 - 不仅仅是在IDE中。
然而......数据是相同的(有测试环境指向我的机器使用的相同数据库)。
代码是相同的...刚刚部署。
如果LINQ存在根本性的错误,那么错误应该发生在所有环境中,对吗?
我已经包含了一些代码,但我怀疑这是一个环境问题,只是我不知道在环境中要看什么。 在IDE中运行时,它使用IIS Express,但IIS 7.0(至少)位于服务器上。
环境问题最有可能是什么问题? [再次,我不认为这是代码 - 代码在IDE中执行异常,有和没有断点。]
[我希望我会稍微编辑这个问题。]
一些代码。 不确定需要多少上下文。 再次 - 此代码在IDE中使用相同的数据完全按预期执行。 仅在部署时才会抛出异常。
// List<DbFirstEntityModelForms>
formsToImport = GetSelectedRecords(collection["keyField"]);
// List<DbFirstEntityModelForms>
baseForms = GetSelectedRecords(collection["keyField"]);
var importStates = context.DbFirstEntityModelStates.AsNoTracking()
.Where(l => context.DbFirstEntityModelForms.Where(f => f.CustomerCd == "IS" && f.LOBCd == baseLOB).Any(f => l.FormId == f.FormId && l.EditionDt == f.EditionDt));
//importStates = importStates.Where(l => formsToImport.Any(f => f.FormId == l.FormId && f.EditionDt == l.EditionDt));
// rewritten as below... still throws exception
foreach (var state in importStates)
{
// List<DbFirstEntityModelStates>
statesToImport.AddRange(formsToImport.Where(form => state.FormId == form.FormId && state.EditionDt == form.EditionDt).Select(form => state));
}
System.NotSupportedException: Unable to create a constant value of type 'DBFirstEntityObject'. Only primitive types or enumeration types are supported in this context.
at System.Data.Objects.ELinq.ExpressionConverter.ConstantTranslator.TypedTranslate(ExpressionConverter parent, ConstantExpression linq)
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Data.Common.CommandTrees.ExpressionBuilder.Internal.EnumerableValidator`3.Validate(IEnumerable`1 argument, String argumentName, Int32 expectedElementCount, Boolean allowEmpty, Func`3 map, Func`2 collect, Func`3 deriveName)
at System.Data.Common.CommandTrees.ExpressionBuilder.Internal.EnumerableValidator`3.Validate()
at System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateNewCollection(IEnumerable`1 elements, DbExpressionList& validElements)
at System.Data.Objects.ELinq.ExpressionConverter.NewArrayInitTranslator.TypedTranslate(ExpressionConverter parent, NewArrayExpression linq)
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
at System.Data.Objects.ELinq.ExpressionConverter.ConstantTranslator.TypedTranslate(ExpressionConverter parent, ConstantExpression linq)
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
at System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
at System.Data.Objects.ELinq.ExpressionConverter.Convert()
at System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()