为什么我得到一个参数异常说我把错误的参数数传递给string.equals方法?
我通过了THREE的论点,应该是正确的.实际上它应该抛出编译时错误不是运行时…
你看到错误吗?
var translations = await (from l in context.Languages join t in context.Translations on l.ISO639_ISO3166 equals t.ISO639_ISO3166 where string.Equals(l.ApplicationName,applicationName,StringComparison.InvariantCultureIgnoreCase) select new Translation { Key = t.Key,Text = t.Text }).ToListAsync();
UPDATE
Test Name: GetTranslations Test FullName: TaaS.IntegrationTests.Tests.TranslationRepositoryTests.GetTranslations Test Source: C:\test\TaaS-WebApplication\TaaS.IntegrationTests\Tests\TranslationRepositoryTests.cs : line 17 Test Outcome: Failed Test Duration: 0:00:00,0473367 Result StackTrace: at System.Linq.Expressions.Expression.GetMethodBasedBinaryOperator(ExpressionType binaryType,Expression left,Expression right,MethodInfo method,Boolean liftToNull) at System.Linq.Expressions.Expression.Equal(Expression left,Boolean liftToNull,MethodInfo method) at System.Data.Entity.Core.Objects.ELinq.LinqExpressionNormalizer.VisitMethodCall(MethodCallExpression m) at System.Linq.Expressions.EntityExpressionVisitor.Visit(Expression exp) at System.Linq.Expressions.EntityExpressionVisitor.VisitLambda(LambdaExpression lambda) at System.Linq.Expressions.EntityExpressionVisitor.Visit(Expression exp) at System.Linq.Expressions.EntityExpressionVisitor.VisitUnary(UnaryExpression u) at System.Linq.Expressions.EntityExpressionVisitor.Visit(Expression exp) at System.Linq.Expressions.EntityExpressionVisitor.VisitExpressionList(ReadOnlyCollection`1 original) at System.Linq.Expressions.EntityExpressionVisitor.VisitMethodCall(MethodCallExpression m) at System.Data.Entity.Core.Objects.ELinq.LinqExpressionNormalizer.VisitMethodCall(MethodCallExpression m) at System.Linq.Expressions.EntityExpressionVisitor.Visit(Expression exp) at System.Linq.Expressions.EntityExpressionVisitor.VisitExpressionList(ReadOnlyCollection`1 original) at System.Linq.Expressions.EntityExpressionVisitor.VisitMethodCall(MethodCallExpression m) at System.Data.Entity.Core.Objects.ELinq.LinqExpressionNormalizer.VisitMethodCall(MethodCallExpression m) at System.Linq.Expressions.EntityExpressionVisitor.Visit(Expression exp) at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter..ctor(Funcletizer funcletizer,Expression expression) at System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.CreateExpressionConverter() at System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassc.<GetResultsAsync>b__a() at System.Data.Entity.Core.Objects.ObjectContext.<ExecuteInTransactionAsync>d__3d`1.MoveNext() --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.sqlServer.DefaultsqlExecutionStrategy.<ExecuteAsyncImplementation>d__9`1.MoveNext() --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter`1.GetResult() at System.Data.Entity.Core.Objects.ObjectQuery`1.<GetResultsAsync>d__e.MoveNext() --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter`1.GetResult() at System.Data.Entity.Internal.LazyAsyncEnumerator`1.<FirstMoveNextAsync>d__0.MoveNext() --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.<ForEachAsync>d__5`1.MoveNext() --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at TaaS.Repository.TranslationRepository.<GetTranslationsAsync>d__2.MoveNext() in C:\_REPOSITORIES\taas-application\TaaS-WebApplication\TaaS.Repository\TranslationRepository.cs:line 20 --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at TaaS.IntegrationTests.Tests.TranslationRepositoryTests.GetTranslations() in C:\_REPOSITORIES\taas-application\TaaS-WebApplication\TaaS.IntegrationTests\Tests\TranslationRepositoryTests.cs:line 45 Result Message: Test method TaaS.IntegrationTests.Tests.TranslationRepositoryTests.GetTranslations threw exception: System.ArgumentException: Incorrect number of arguments supplied for call to method 'Boolean Equals(System.String,System.String,System.StringComparison)'
解决方法
这是一个运行时错误,因为您可能会针对
Linq query provider运行,该版本需要从您的C#代码创建的C#编译器为
expression,并在运行时执行.提供商可能无法翻译此等量的重载.
尝试将您的Linq查询更改为:
(from l in context.Languages join t in context.Translations on l.ISO639_ISO3166 equals t.ISO639_ISO3166).AsEnumerable() .Where(l => string.Equals(l.ApplicationName,StringComparison.InvariantCultureIgnoreCase)) .Select(new Translation { Key = t.Key,Text = t.Text }).ToListAsync();