Linq: включить соединение на все уже присоединившиеся таблицы

Мне было интересно, возможно ли это в Linq: У меня три таблицы:

Request
--id
--Adress
--Description
Nav.Properties:
-- RequestStatus

RequestStatus
--RequestId
--PubDate
--StatusTypeId
Nav.Properties:
-- Request
-- StatusType

StatusType
--Id
--StatusTypeDescription
Nav.Properties
-- RequestStatus

В Linq мне удается собрать первые два таблицы вместе с этим:

var RequestWithStatus = dbContext.Requests.Include("RequestStatus").ToList();

Но ... то, что я хотел бы иметь, это столбец StatusTypeDescription, также включенный в этот запрос (так что используйте соединение в третьей таблице).

1
nl ja de
linq! = база данных. Мы не видим ваших навигационных свойств (что было бы полезно), поэтому, пожалуйста, покажите свои классы вместо таблиц базы данных ...
добавлено автор Raphaël Althaus, источник
Но каковы отношения? 1-2-1, 1-2-М? Как они ограничены?
добавлено автор Jodrell, источник
Обновлено с помощью свойств nav. Это псевдокод
добавлено автор Rob Joosen, источник

1 ответы

если экземпляр запроса может иметь один RequestStatus, а экземпляр RequestStatus может иметь один StatusType, тогда вы можете просто сделать

var requestList = dbContext.Requests.Include("RequestStatus.StatusType").ToList();

there's also a "lambda" (Expression>) overload for Include (in System.Data.Entity) (not sure it will work with mysql)

var requestList = dbContext.Requests.Include(m => m.RequestStatus.StatusType).ToList();

все ваши данные будут присутствовать в списке (загрузка с нетерпением).

Затем вы можете получить доступ к описанию

var firstRequest = requestList.First();
var requestDescription = firstRequest.Description;
var statusTypeDescription = firstRequest.RequestStatus.StatusType.Description;

или безопаснее

var statusTypeDescription = firstRequest.RequestStatus != null && firstRequest.RequestStatus.StatusType != null 
          ? firstRequest.RequestStatus.StatusType.Description
          : string.Empty;
0
добавлено
Спасибо, трюк был частью запроса RequestStatus.StatusType.
добавлено автор Rob Joosen, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot