Не поддерживается исключение с функцией платформы сущностей TruncateTime - PullRequest
0 голосов
/ 22 мая 2018

Я получаю исключение при попытке использовать TruncateTime () в моем выражении linq, и я не уверен, почему?

Вот мое утверждение

var yogaProfile = dbContext.YogaProfiles.Where(i => i.ApplicationUserId == userId).First();

var yogaEvents = yogaProfile.RegisteredEvents.Where(j => 
       (j.EventStatus == YogaSpaceEventStatus.Active || j.EventStatus == YogaSpaceEventStatus.Completed)
       && DbFunctions.TruncateTime(j.UTCEventDateTime) > DbFunctions.TruncateTime(yesterday)
       && DbFunctions.TruncateTime(j.UTCEventDateTime) <= DbFunctions.TruncateTime(todayPlus30)
       ).ToList();

и здесьисключение

System.NotSupportedException: эту функцию можно вызывать только из LINQ to Entities.

в System.Data.Entity.DbFunctions.TruncateTime (Nullable`1 dateValue)

в YogaBandy2017.Services.Services.YogaSpaceService. <> C__DisplayClass9_1.b__1 (YogaSpaceEvent j) в C: \ Users \ chuckdawit \ Source \ Рабочих пространствах \ YogaBandy2017 \ YogaBandy2017 \ Yogabandy2017.ServiceService.Services: Услуги

в System.Linq.Enumerable.WhereListIterator`1.MoveNext ()

в System.Collections.Generic.List'1..ctor (коллекция IEnumerable`1)

в System.Linq.Enumerable.ToList [TSource] (источник IEnumerable`1)

в YogaBandy2017.Services.Services.YogaSpaceService.GetUpcomingAttendEventCounts (String userId) в C: \ Users \ chuckdawit \ Source \ WorkaceYogaBandy2017 \YogaBandy2017 \ Yogabandy2017.Services \ Services \ YogaSpaceService.cs: строка 255

в YogaBandy2017.Controllers.ScheduleController.GetEventCountsForAttendCalendar () в C: \ Users \ chuckdawit \ Source \ Рабочие пространства2017 \ YogaBand \ YogaBandy7 \ \BByBY \ yyBand \201B \ yyBand \ йогаScheduleController.cs: строка 309

1 Ответ

0 голосов
/ 22 мая 2018

System.NotSupportedException: эта функция может быть вызвана только из LINQ to Entities.

У вас есть это исключение, потому что результат переменной yogaProfile не является IQueryable, которыйиспользуется Linq To Entities для выполнения запроса на стороне сервера.Чтобы сделать вашу переменную IQueryable, вам нужно удалить метод расширения First(), который вы используете в конце запроса, и заменить его на Take(1).

Таким образом, вместо

var yogaProfile = dbContext.YogaProfiles.Where(i => i.ApplicationUserId == userId).First();

Вы должны иметь это:

var yogaProfile = dbContext.YogaProfiles.Where(i => i.ApplicationUserId == userId).Take(1);

Обратите внимание, что с первым оператором вы имеете дело с Linq To Objects, когда выполняете Linq напеременная.Удалив метод расширения First() и заменив его методом расширения Take(), вы выполните Linq To Entites.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...