Linq to Entities Query不检索记录

时间:2013-11-18 20:27:39

标签: c# sql linq entity-framework

由于我需要来自4个不同实体集(Medical,City,Region,MedicalServices)的查询,因此我创建了一个viewmodel,如下所示;

  public class MedicalCityRegionView
{
    public Entity.Medical V_Medical { get; set; }
    public Entity.City V_City {get;set;}
    public Entity.Region V_Region{get;set;}
    public Entity.MedicalService V_MedicalService{ get; set; }
}

一个从这4个表中获取所有记录的类,如下所示;

 public class EntityHandler
{
    public IQueryable<MedicalCityRegionView> GetAll(Entity.MedicalEntities MCR_View)
    {
        IQueryable<MedicalCityRegionView> result = from mID in MCR_View.Medicals
                     join cs in MCR_View.Cities on mID.CityFK equals cs.CityID
                     join reg in MCR_View.Regions on cs.RegionFK equals reg.RegionID

                     select new MedicalCityRegionView();

        return result;
    }
}

这部分是在背后的代码上;

 result = from mID in em.Medicals
          join ms in em.MedicalServices on mID.MsMedicalFK 
          equals ms.ServiceID
          join c in em.Cities on mID.CityFK equals c.CityID
          join reg in em.Regions on c.RegionFK equals 
          reg.RegionID

          where ms.ServiceID == SelectedMedicalService 
          &&
          c.CityID == SelectedCity
          select new Classes.MedicalCityRegionView();


  listView_MainContent.DataSource = result.ToList();
  listView_MainContent.DataBind();

我得到的错误;

An exception of type 'System.Web.HttpException' occurred in 
System.Web.dll but was not handled in user code

Additional information: DataBinding: 
'MedicalBootStrap.Classes.MedicalCityRegionView' does not 
contain a property with the name 'MedicalID'.

由于医疗实体确实包含MedicalID,我认为“public Entity.Medical V_Medical {get; set;}”就足够了。

正如您在图像上看到的那样,已经创建了14条记录,这些记录是正确的,但它们是空的;

enter image description here

请你告诉我这个问题吗?

2 个答案:

答案 0 :(得分:1)

看到截图确认了我的怀疑......

尝试

IQueryable<MedicalCityRegionView> result = from mID in MCR_View.Medicals
                 join cs in MCR_View.Cities on mID.CityFK equals cs.CityID
                 join reg in MCR_View.Regions on cs.RegionFK equals reg.RegionID

                 select new MedicalCityRegionView()
                   { V_Medical = mID,
                     V_City = cs,
                     V_Region = reg };

result = from mID in em.Medicals
      join ms in em.MedicalServices on mID.MsMedicalFK 
      equals ms.ServiceID
      join c in em.Cities on mID.CityFK equals c.CityID
      join reg in em.Regions on c.RegionFK equals 
      reg.RegionID

      where ms.ServiceID == SelectedMedicalService 
      &&
      c.CityID == SelectedCity
      select new Classes.MedicalCityRegionView()
                  { V_Medical = mID,
                    V_City = c,
                    V_Region = reg,
                    V_MedicalService = ms};     

这应该会在14个实例中为您提供数据。

对于其余部分,Medical.ID或Medical.MedicalID可以作为MedicalCityRegionView.Medical.Id访问,而不是直接在MedicalCityRegionView上。

答案 1 :(得分:0)

据我所知,生成只有虚拟get的实体;组;方法不足以检索与数据库数据相对应的数据。我认为你可以通过映射实体定义中至少必要的字段来解决这个问题。

我希望这会奏效,祝你好运!