Я получаю исключение, указанное в кавычках ниже. Я попытался удалить проблему много, но я получаю исключение ниже. Я прочитал знакомые ответы на мою проблему в стеке над потоком, но они не решают мою проблему. Я также прокомментировал выше, где я получаю исключение.System.String ElementAt [String] (System.Collections.Generic.IEnumerable1 [System.String], Int32) 'метод
System.NotSupportedException был необработанным кодом пользователя
HResult = -2146233067 = Сообщение LINQ к Entities не распознает метода «System.String ElementAt [String] (System.Collections.Generic.IEnumerable1[System.String], Int32)' 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 родителя, выражение LINQ) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression (Выражение LinQ) на System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.UnaryTranslator. TypedTranslate (ExpressionConverter parent, UnaryExpression linq) на System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator1.Translate(ExpressionConverter parent, Expression linq) at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.EqualsTranslator.TypedTranslate(ExpressionConverter parent, BinaryExpression linq) at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator
1.Translate (ExpressionConverter родителя, выражение LINQ) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression (Выражение LINQ) на System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda (LambdaExpression лямбда, входной DbExpression) на System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda (LambdaExpression лямбда, вход DbExpression , DbExpressionBinding &) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate (ExpressionConverter родителя, MethodCallExpression вызов, DbExpression & источника, DbExpressionBinding & sourceBinding, DbExpression & лямбды) на System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate (ExpressionConverter родителя, MethodCallExpression вызова) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate (ExpressionConverter родитель, MethodCallExpression вызов, SequenceMethod sequenceMethod) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate (ExpressionConverter parent, MethodCallExpression linq) 44445164 +10617451515053691368888 на System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator1.Translate(ExpressionConverter parent, Expression linq) at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda) at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SelectTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) 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 родителя, выражение LINQ) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression (Выражение LINQ) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateSet (Выражение LinQ) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.UnarySequenceMethodTranslator.Translate (ExpressionConverter родителя, MethodCallExpression вызов) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate (ExpressionConverter parent, MethodC allExpression вызов, SequenceMethod sequenceMethod) на System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate (ExpressionConverter родитель, MethodCallExpression LINQ) в System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator forMergeOption) в System.Data.Entity.Core.Objects.ObjectQuery FUNC, IDbExecutionStrategy executionStrategy, булева startLocalTransaction, булева releaseConnectionOnSuccess) на System.Data.Entity.Core.Objects.ObjectQuery операции) на System.Data.Entity.Core.Objects.ObjectQuery forMergeOption) на System.Data.Entity.Core.Objects.ObjectQuery1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() at System.Data.Entity.Internal.LazyEnumerator
1.MoveNext() в System.Linq.Enumerable.FirstOrDefault [TSource] (IEnumerable последовательности) в System.Data.Entity. Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle [TResult] (IEnumerable1 query, Expression queryRoot) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable
1 кислый в.п.) в Neon.DBHandler.registerStudentCourses (строка р, List`1 coursesIdSelected) в C: \ Users \ AbdullahABBASI \ Desktop \ AbbasiWebProject \ неон \ Models \ DBHandler.cs: линия в Neon.Student_RegisterCourse.registerbutton_Click (отправитель объекта, EventArgs е) в C: \ Users \ AbdullahABBASI \ Desktop \ AbbasiWebProject \ неон \ Student_RegisterCourse.aspx.cs: линия на System.Web.UI.WebControls.Button.OnClick (EventArgs е) в системе .Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) на System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String eventArgument) на System.Web.UI.Page. RaisePostBackEvent (IPost BackEventHandler SourceControl, String eventArgument) на System.Web.UI.Page.RaisePostBackEvent (NameValueCollection PostData) в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
код ниже:
internal static void registerStudentCourses(string p, List<string> coursesIdSelected)
{
AbbasiDatabaseEntities objDB = new AbbasiDatabaseEntities();
Student objStudent = objDB.Students.Where(s => s.Id == p).FirstOrDefault();
List<Course> courses = new List<Course>();
for (int i = 0; i<coursesIdSelected.Count; i++)
{
//in the line below i am getting exception mentioned above
var course = objDB.Courses
.Where(c => c.Id == (string)coursesIdSelected.ElementAt(i))
.Select(s=> s)
.FirstOrDefault();
courses.Add(course);
}
objStudent.Courses = courses;
}
LINQ запрос преобразуется в SQL во время выполнения. По этой причине .ElementAt (i) недоступен. – gypsyCoder
Вы выполняете 'SELECT N + 1' (технически это' SELECT N') ... в общем, это антипаттерн (вы делаете выбор в для цикла, поэтому в db будет выполняться n отдельных запросов). – xanatos