【问题标题】:Unable to create a constant value of type 'Domain.DataModel.Hospital'. Only primitive types or enumeration types are supported in this context无法创建“Domain.DataModel.Hospital”类型的常量值。此上下文仅支持原始类型或枚举类型
【发布时间】:2016-10-24 10:50:38
【问题描述】:

我正在尝试使用 linq 获取数据列表,但出现此错误。

我的问题是:

我有一个Hospital 模型。该模型由城市代码组成。所有城市代码都是十进制类型。(1,2,3,4,..等)

我还有一个与TcKimlik 属性相关的PersonPersonStatu models.Person 和PersonStatu。而HospitalPersonStatuHospitalCode 属性相关的模型。

所以当我尝试通过城市代码去医院时,如果城市代码大于 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();

那么我该怎么做才能解决这个问题呢?

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    你的问题从这一行开始:

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

    这一行从Hospitals 匹配1 的Hospitals 数据上下文创建IQueryable 集合,因此您不能简单地将数据库上下文中的数据集与保存在内存中的另一组数据执行连接。

    要使用多个连接处理Hospitals 集合,基于“Showing Unable to create a constant value of type ''. Only primitive types ('such as Int32, String, and Guid') are supported in this context”,请将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();
    

    注意:如果修改后的查询仍然不起作用,请尝试交换context.Personscontext.PersonStatus 的顺序,包括它们之间的on 子句关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多