2013-11-18 3 views
0

Так как мне нужен запрос из 4 разных наборов сущностей (Medical, City, Region, MedicalServices), я создал viewmodel следующим образом;Linq to Entites Query не извлекает записи

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'. 

Поскольку медицинская Entity действительно содержит MedicalID, я думал, что "общественность Entity.Medical V_Medical {получить, установить;}" будет достаточно.

И как вы видите на изображении, было создано 14 записей, которые верны, но они ноль;

enter image description here

Не могли бы вы просветить меня по этому вопросу?

+0

@zimdanen aha, ok Я пытаюсь, спасибо – mctuna

+1

Вам нужно привязать ваше представление к 'V_Medical.MedicalID', а не просто' MedicalID' –

+1

Обратите внимание, что ваши запросы Linq - это просто запросы, пока вы не перечислите их, ToList() 'например. Только тогда они выполняются в хранилище данных. Это означает, что вы можете создать базовую часть своего запроса в одном месте, а затем применить фильтры по мере продвижения. Это уменьшит дублирование. –

ответ

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.

+0

Теперь код выглядит точно так, как вы предполагали, но я не смог получить последнюю часть, я думаю, вы также подразумеваете, что отсутствует координация между Медицинским сущностью и MedicalCityRegionView ViewModel? – mctuna

+0

где-то кажется, что вы извлекаете MedicalCityRegionView.MedicalID, которого нет. Найдите, где это происходит, и измените его на MedicalCityRegionView.V_Medical.MedicalId или MedicalCityRegionView.V_Medical.ID, в зависимости от того, какое свойство действительно существует :) – oerkelens

+0

ok теперь я понял, что вы имеете в виду, в asp side listview datakeynames каким-то образом не распознает ни одно из ваших предложений выше , Я пытаюсь найти для этого подходящий ключ. Результат var приносит записи отлично, но я не знаю, что писать в datakeynames, есть ли у вас какие-либо предложения? – mctuna

0

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

Я надеюсь, что это сработает, удачи!

+0

Я думал, что это будет позаботиться автоматически, поскольку я даю сущности как тип этих функций, как и где я должен делать эти сопоставления тогда? – mctuna

+0

Я не думаю, что это берется автоматически, потому что вы получаете результаты, но у них есть все необходимые поля с нулевым значением, не так ли? Вот почему я думал, что отображение полей отсутствует. – mgokhanbakal