Указанный член типа не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности

var result = (from bd in context.tblBasicDetails from pd in context.tblPersonalDetails.Where(x => x.UserId == bd.UserId).DefaultIfEmpty() from opd in context.tblOtherPersonalDetails.Where(x => x.UserId == bd.UserId).DefaultIfEmpty() select new clsProfileDate() { DOB = pd.DOB }); foreach (clsProfileDate prod in result) { prod.dtDOB = !string.IsNullOrEmpty(prod.DOB) ? Convert.ToDateTime(prod.DOB) : DateTime.Today; int now = int.Parse(DateTime.Today.ToString("yyyyMMdd")); int dob = int.Parse(prod.dtDOB.ToString("yyyyMMdd")); string dif = (now - dob).ToString(); string age = "0"; if (dif.Length > 4) age = dif.Substring(0, dif.Length - 4); prod.Age = Convert.ToInt32(age); } GetFinalResult(result); 

 protected void GetFinalResult(IQueryable result) { int from; bool bfrom = Int32.TryParse(ddlAgeFrom.SelectedValue, out from); int to; bool bto = Int32.TryParse(ddlAgeTo.SelectedValue, out to); result = result.AsQueryable().Where(p => p.Age >= from); } 

Здесь я получаю исключение:

Указанный член типа «Возраст» не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности.

Где Age нет в базе данных, это свойство, которое я создал в classе clsProfileDate для вычисления Age from DOB. Любое решение?

Вы не можете использовать свойства, которые не сопоставлены столбцу базы данных в выражении Where . Вы должны построить выражение, основанное на отображаемых свойствах, например:

 var date = DateTime.Now.AddYears(-from); result = result.Where(p => date >= p.DOB); // you don't need `AsQueryable()` here because result is an `IQueryable` anyway 

В качестве замены вашего свойства, не привязанного к Age вы можете извлечь это выражение в статический метод, например:

 public class clsProfileDate { // ... public DateTime DOB { get; set; } // property mapped to DB table column public static Expression> IsOlderThan(int age) { var date = DateTime.Now.AddYears(-age); return p => date >= p.DOB; } } 

И затем используйте его так:

 result = result.Where(clsProfileDate.IsOlderThan(from)); 

Многие люди говорят, что это плохой ответ, потому что это не лучшая практика, но вы также можете преобразовать ее в список до своего места.

 result = result.ToList().Where(p => date >= p.DOB); 

Ответ Слаумы лучше, но это тоже сработает. Это стоит больше, потому что ToList () выполнит запрос по базе данных и перенесет результаты в память.

Вы также получите это сообщение об ошибке, когда вы случайно забудете определить сеттер для свойства. Например:

 public class Building { public string Description { get; } } var query = from building in context.Buildings select new { Desc = building.Description }; int count = query.ToList(); 

Вызов ToList даст такое же сообщение об ошибке. Это очень тонкая ошибка и очень трудно обнаружить.

Прежде всего, вам нужно понять, в чем причина вашей проблемы.

Для меня у меня была модель, вот так:

 public class SessionGroup { public int Id { get; set; } public int UserId { get; set; } private DateTime beginDate; private DateTime? endDate; public DateTime BeginDate { get { return beginDate; } set { beginDate = DateTimeHelper.ToUtc(value); } } public DateTime? EndDate { get { return endDate; } set { if (value.HasValue) endDate = DateTimeHelper.ToUtc(value.Value); else endDate = null; } } public bool IsSessionOpen { get { return EndDate == null; } } public bool IsSessionClosed { get { return !IsSessionOpen; } } } 

Позже в моем запросе я пытался сделать что-то вроде:

 ... .Where(usr => usr.Sessions.All(s => !s.IsSessionClosed)) 

Проблема здесь, как вы можете предположить, связана с IsSessionClosed которая является авто-имуществом и не является фактическим полем базы данных, однако я использовал это, потому что я не знал, что это не связано с фактическим столбцом БД.

Я забыл выбрать столбец (или установить / сопоставить свойство со значением столбца):

 IQueryable queryable = from t in dbcontext.SampleTable where ... select new DataModel { Name = t.Name }; 

Вызов queryable.OrderBy("Id") исключение, хотя DataModel имеет Id свойства.

Правильный запрос:

 IQueryable queryable = from t in dbcontext.SampleTable where ... select new DataModel { Name = t.Name, Id = t.Id }; 
  • LEFT JOIN в LINQ для объектов?
  • Linq int to string
  • Как преобразовать DbSet в инфраструктуру Entity в ObjectQuery
  • Возможна ли инъекция через динамический LINQ?
  • ASP.NET MVC 2.0 Реализация поиска в jqgrid
  • Как сделать массовую вставку - Linq для объектов
  • Как выполнить сравнение даты в запросе EF?
  • LINQ to Entities не распознает метод 'System.String Format (System.String, System.Object, System.Object)'
  • Entity Framework 4 Single () vs First () vs FirstOrDefault ()
  • Как создать дерево выражений LINQ, чтобы выбрать анонимный тип
  • Массовое удаление в LINQ для объектов
  • Interesting Posts

    static_assert не удается выполнить компиляцию, хотя функция шаблона называется нигде

    Как заставить Chrome использовать поисковую систему google.com без https

    Отключить звук из NotificationChannel

    Ограничьте вывод видео в секцию дисплея и оставите пустой

    Как исправить UNMOUNTABLE_BOOT_VOLUME (0x000000ED) на моем ноутбуке Dell Windows XP?

    Как нарисовать пользовательскую кнопку в окне заголовка windows с помощью Windows Forms?

    Как замаскировать подпись браузера Firefox?

    Разделить строку, содержащую параметры командной строки, в строку в C #

    Эффективный способ rbind data.frames с разными столбцами

    Как восстановить ПК с ОС Windows Vista до заводских настроек, когда он был обновлен до Windows 7

    Как расширить class без использования супер в ES6?

    Добавление файла .so в Android Studio

    Grub dual boot-debian wheezy (зашифрованный) с другой ОС

    Сумма предметов в коллекции

    Mongoose Уникальные значения во вложенном массиве объектов

    Давайте будем гением компьютера.