gpt4 book ai didi

c# - 在 LINQ QUery : 中的 .Select 中使用索引时出错

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:00 25 4
gpt4 key购买 nike

我有以下代码:

        //var testQuestionHeaders = _questionsRepository.GetAll()
// .Where(m => m.Problem != null &&
// m.Problem.SubTopic != null &&
// m.Problem.SubTopic.Topic != null &&
// m.Problem.SubTopic.Topic.SubjectId == 1)
// .Select(m => new TestQuestionHeader
// {
// Id = 1,
// QId = m.QuestionId,
// A = false,
// C = 0,
// F = 0
// })
// .ToList();

var testQuestionHeaders = _questionsRepository.GetAll()
.Where(m => m.Problem != null &&
m.Problem.SubTopic != null &&
m.Problem.SubTopic.Topic != null &&
m.Problem.SubTopic.Topic.SubjectId == 1)
.Select((m, index) => new TestQuestionHeader
{
Id = index + 1,
QId = m.QuestionId,
A = false,
C = 0,
F = 0
})
.ToList();

第一个代码(现在已注释掉)有效,但是当我添加对索引的使用时,出现以下异常:

System.NotSupportedException was unhandled by user code
HResult=-2146233067
Message=LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[Models.Http.TestQuestionHeader] Select[Question,TestQuestionHeader](System.Linq.IQueryable`1[Models.Core.Question], System.Linq.Expressions.Expression`1[System.Func`3[Models.Core.Question,System.Int32,Models.Http.TestQuestionHeader]])' method, and this method cannot be translated into a store expression.
Source=EntityFramework
StackTrace:
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.DefaultTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Convert()
at System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__a()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__9()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Services.QuestionService.GetTestQuestionHeadersBySubject(Int32 subjectId) in S146\Services\QuestionService.cs:line 100
at Web.Controllers.TestController.CreateTestData() in S146\WebRole1\Controllers\TestController.cs:line 39
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
InnerException:

有人可以给我一些建议吗?这是非常可重复的,对我来说重要的是有一些方法可以在输出中将 Id 设置为不同的值。

最佳答案

嗯,异常(exception)很明显:

您不能使用 Select 的重载(带有 Func<TSource, int, TResult> selector 参数的那个)在 linq to entities 查询中(在用于 linq to entities 查询的 IQueryable<T> 上)。

所以如果你需要它,你必须先枚举

.ToList()
.Select((m, index) =>...

关于c# - 在 LINQ QUery : 中的 .Select 中使用索引时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19837813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com