Не удалось создать постоянное значение типа "Domain.DataModel.Hospital". В этом контексте поддерживаются только примитивные типы или типы перечислений

87
7

Я пытаюсь получить список данных с linq, но я получаю эту ошибку.

Вскоре моя проблема:

У меня есть модель Hospital. И эта модель состоит из кода города. Весь код города имеет десятичный тип (1,2,3,4,.. и т.д.),

Также у меня есть PersonStatu Person и PersonStatu Персонажи и PersonStatu связаны с собственностью TcKimlik модель Hospital связана с свойством PersonStatu HospitalCode.

Поэтому, когда я пытаюсь добраться до больниц по коду города, если код города больше 10, он работает. Но когда он меньше 10, он не сможет вернуть какие-либо данные. И возникает такая ошибка:

Unable to create a constant value of type 'Domain.DataModel.Hospital'. Only primitive types or enumeration types are supported in this context.

Вот моя модель Hospital :

[Table("SPTS.HOSPITALS")]
public partial class Hospital
{
....

public decimal? IL_KODU { get; set; }

....

}

Вот мои запросы Querable LINQ:

   var hospitals = context.Hospitals.Where(p=>p.IL_KODU==1);

var persons = (from c in context.Persons
join x in context.PersonStatus on c.TcKimlik equals x.Tckn
join h in hospitals on x.HospitalCode equals h.KURUM_KODU
where x.Statu == true
select new DataViewModel
{
Id = c.Id,
TcKimlik = c.TcKimlik,
Uyruk = c.Uyruk,
Ad = c.Ad,
Soyad = c.Soyad,
Cinsiyet = c.Cinsiyet,
DogumTarihi = c.DogumTarihi,
KurumStatu = h.PAYDAS,
KurumKodu = h.KURUM_KODU,
KurumAdi = h.KURUM_ADI,
BranchName = c.Brans.BranchName,
AcademicTitleName = c.AkademikUnvan.Title,
ManagerialTitleName = c.IdariUnvan.Title,
StaffStatuName = c.Durum.Statu,
BranchTypeName = c.Unvan.Type,
ServiceClassName = c.Unvan.ServiceClass.Name,
City = h.KURUM_ILI,
CityCode = h.IL_KODU,
CityTownName = h.KURUM_ILCESI
}).AsQueryable();

Итак, что я могу сделать, чтобы решить эту проблему?

Любая помощь будет оценена по достоинству.

Благодарю.

спросил(а) 2016-10-23T00:01:00+03:00 4 года, 5 месяцев назад
1
Решение
88

Ваша проблема начинается с этой строки:

var hospitals = context.Hospitals.Where(p=>p.IL_KODU==1);

Эта линия создает IQueryable коллекции из Hospitals контекста данных, который IL_KODU соответствует 1, следовательно, вы не можете просто выполнить присоединение наборов данных на контексте базы данных с другими наборами данных, сохраненных в памяти.

Чтобы обработать коллекцию Hospitals используя несколько объединений, на основе " Показывать Невозможно создать постоянное значение типа". В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid) ", поместите метод Where непосредственно на второе соединение вместо этого:

var persons = (from c in context.Persons
join x in context.PersonStatus
on c.TcKimlik equals x.Tckn
join h in context.Hospitals.Where(p => p.IL_KODU == 1) // where clause added here using database context
on x.HospitalCode equals h.KURUM_KODU
where x.Statu == true
select new DataViewModel
{
Id = c.Id,
TcKimlik = c.TcKimlik,
Uyruk = c.Uyruk,
Ad = c.Ad,
Soyad = c.Soyad,
Cinsiyet = c.Cinsiyet,
DogumTarihi = c.DogumTarihi,
KurumStatu = h.PAYDAS,
KurumKodu = h.KURUM_KODU,
KurumAdi = h.KURUM_ADI,
BranchName = c.Brans.BranchName,
AcademicTitleName = c.AkademikUnvan.Title,
ManagerialTitleName = c.IdariUnvan.Title,
StaffStatuName = c.Durum.Statu,
BranchTypeName = c.Unvan.Type,
ServiceClassName = c.Unvan.ServiceClass.Name,
City = h.KURUM_ILI,
CityCode = h.IL_KODU,
CityTownName = h.KURUM_ILCESI
}).AsQueryable();

NB: Если измененный запрос все равно не будет работать, попробуйте поменять местами context.Persons и context.PersonStatus заказ друг на друга, в том числе on статье отношения между ними.

ответил(а) 2016-10-24T05:50:00+03:00 4 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема