2009-05-03 2 views
2

У меня есть вопрос, связанный с this one. Я не хочу делать расчет (агрегацию), но мне нужно получить отображаемые значения из ассоциации. В моем коде C# я могу напрямую ссылаться на это значение, потому что ограничение внешнего ключа сделало Linq сгенерирует всю необходимую проводку. Когда я указываю IQueryable как свойство источника данных Gridview и ссылаюсь на то, что не является столбцом первичного объекта в результирующем наборе, я получаю сообщение об ошибке, что столбец не существует. Как новичок в Linq, я предполагаю, что назначение неявно преобразует IQueryable в список, и ассоциации теряются. Мой вопрос в том, что это хороший способ сделать это?Linq to SQL и Gridview Datasource

Я предполагаю, что я могу обойти это, написав параллельный запрос, возвращающий анонимный тип, содержащий все столбцы, которые мне нужны для gridview. Похоже, что сделав это, я буду хранить данные в памяти избыточно, что у меня уже есть. Могу ли я запросить структуры данных в памяти «на лету» при назначении источника данных? Или есть более прямое решение?

Сетью сетки предполагается отображать ассоциации медицинских групп врача, а имя ассоциации находится в таблице поиска.

  IQueryable<Physician> ph = 
         from phys in db.Physicians 
         //from name in phys.PhysicianNames.DefaultIfEmpty() 
         //from lic in phys.PhysicianLicenseNums.DefaultIfEmpty() 
         //from addr in phys.PhysicianAddresses.DefaultIfEmpty() 
         //from npi in phys.PhysicianNPIs.DefaultIfEmpty() 
         //from assoc in phys.PhysicianMedGroups.DefaultIfEmpty() 
         where phys.BQID == bqid 
         select phys; 

alt text http://heeroz.com/phys.jpg

Так, на основании ответа Дениса, я удалил все ненужные вещи из моего запроса. Я подумал, что с самого начала я не могу задать правильный вопрос.

В любом случае на странице показаны данные врача. Я хочу отобразить все членства в медицинской группе в сетке (и позволить пользователю вставлять, редактировать и обновлять филиалы). Теперь я понимаю, что мне не нужно явно вступать в эти другие таблицы - Linq делает это для меня. Я могу получить доступ к номеру лицензии, который находится в отдельной таблице, путем ссылки на него по цепочке дочерних ассоциаций. я не могу ссылаться на имя медицинской группы в GridView, который возвращает меня к моему вопросу:

AffiliationGrid.DataSource = ph.First().PhysicianMedGroups; 

Это не работает, потому что med_group_print_name не доступен для GridView:

A field or property with the name 'med_group_print_name' was not found on the 
selected data source. 

Опять же, медведь со мной, если все слишком очевидно, что я не понимаю Линк ... потому что я этого не делаю.

ответ

1

Ваш запрос кажется странным. Вы должны попытаться просто показать

ph = from phys in db.Physicians 
    where phys.BQID == bqid 
    select phys; 

в вашей сетке. Это должно сработать. Также, почему вызовы Load()? Если DataContext не удаляется, когда сетка привязана, вам не нужно.

Если у вас есть вопросы, пожалуйста, вы можете опубликовать сообщение об ошибке вы получите, что бы помочь ...

Часть 2

Проблема заключается в том, что у вас есть имя эффективно не в PhysMedGroup , Вам нужно перейти на один уровень вниз до MedGroupLookup для доступа к имени, поскольку оно является свойством этого класса.

В зависимости от используемой вами технологии (это похоже на WinForms или Web Forms) вам необходимо настроить привязку данных для доступа к адресу MedGroupLookup.med_group_print_name.

+0

Да Я понял, что нагрузки могут не понадобиться. Я пересмотрел свой вопрос. – cdonner

+0

или, скорее, сделаю это в ближайшее время. – cdonner

+0

Затем я получаю следующее: Поле или свойство с именем «MedGroupLookup.med_group_print_name» не было найдено в выбранном источнике данных. – cdonner