У меня есть вопрос, связанный с этим . Я не хочу делать вычисления (агрегацию), но мне нужно получить отображаемые значения из ассоциации. В моем коде C # я могу напрямую ссылаться на значение, потому что ограничение внешнего ключа заставило Linq генерировать всю необходимую проводку.
Когда я указываю IQueryable в качестве свойства источника данных Gridview и ссылаюсь на то, что не является столбцом первичной сущности в наборе результатов, я получаю сообщение об ошибке, что столбец не существует.
Как новичок в Linq, я предполагаю, что назначение неявно преобразует IQueryable в список, и ассоциации теряются.
У меня вопрос, как это можно сделать?
Я предполагаю, что могу обойти это, написав параллельный запрос, возвращающий анонимный тип, который содержит все столбцы, которые мне нужны для вида сетки. Кажется, что, делая это, я бы избыточно хранил данные в памяти, которые у меня уже есть. Могу ли я на лету запрашивать структуры данных в памяти при назначении источника данных? Или есть более прямое решение?
Предполагается, что в виде сетки отображаются ассоциации медицинских групп врачей, а название ассоциации содержится в справочной таблице.
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;
(источник: heeroz.com )
Итак, основываясь на ответе Дениса, я удалил все ненужные вещи из своего запроса. Я подумал, что, возможно, я не задаю правильный вопрос для начала.
В любом случае, на странице отображаются данные врача. Я хочу отобразить все связи медицинских групп в сетке (и позволить пользователю вставлять, редактировать и обновлять присоединения). Теперь я понимаю, что мне не нужно явно объединяться в этих других таблицах - Linq делает это для меня. Я могу получить доступ к номеру лицензии, который находится в отдельной таблице, ссылаясь на него через цепочку дочерних ассоциаций.
Я не могу сослаться на название медицинской группы в сетке, что возвращает меня к моему вопросу:
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.
Опять же, терпите меня, если слишком очевидно, что я не понимаю Линка ... потому что я не понимаю.