Вопрос

У меня есть вопрос, связанный с этим . Я не хочу делать вычисления (агрегацию), но мне нужно получить отображаемые значения из ассоциации. В моем коде 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;

 alt text
(источник: 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.

Опять же, терпите меня, если слишком очевидно, что я не понимаю Linq ... потому что я не понимаю.

Это было полезно?

Решение

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top