Как сделать синтаксис запроса Linq C# эквивалентным синтаксису метода для ThenInclude? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь преобразовать синтаксис метода в синтаксис запроса.

Структура класса вложена следующим образом:

  1. Property
  2. PropertyParty
  3. Party
  4. PartyMailingAddress
  5. PropertyMailingAddress

Кажется, MethodSyntax (первый) объединяет меньше строк, сгруппированных вместе, по сравнению с синтаксисом запроса, что дает больше строк.

Как мне исправить второй синтаксис запроса, чтобы он был эквивалентен синтаксису метода?

var result = db.Property.Include(pm => pm.PropertyParty)
                    .Include(pm => pm.PropertyParty)
                    .ThenInclude(x => x.Party)
                    .ThenInclude(x => x.PartyMailingAddress)
                    .ThenInclude(x => x.PropertyMailingAddress)
                    .ToList();

var testingResult = (from property in db.Property
                     join propertyParty in db.PropertyParty
                        on property.PropertyId equals propertyParty.PropertyId
                     join party in db.Party
                        on propertyParty.PartyId equals party.PartyId
                     join partyMailingAddress in db.PartyMailingAddress
                        on party.PartyId equals partyMailingAddress.PartyId
                     join propertyMailingAddress in db.PropertyMailingAddress
                        on partyMailingAddress.PartyMailingAddressId equals propertyMailingAddress.PartyMailingAddressId
                     select property).ToList();

* Если нет эквивалента, могу ли я получить результаты запроса и сгруппировать их, чтобы они были похожи на синтаксис метода ?

Ответ синтаксиса запроса не должен содержать ThenInclude

В настоящее время используется Net Core 2.2

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Специального синтаксиса LINQ для Include нет. Так что эквивалент - это не набор объединений. Это

var q = from p in db.Property
                    .Include(pm => pm.PropertyParty)
                    .Include(pm => pm.PropertyParty)
                    .ThenInclude(x => x.Party)
                    .ThenInclude(x => x.PartyMailingAddress)
                    .ThenInclude(x => x.PropertyMailingAddress)
        select p;

var testingReqult = p.ToList();
0 голосов
/ 27 мая 2020

Причина, по которой вы видите больше строк в синтаксисе запроса, заключается в том, что там вы выполняете соединения, в то время как метод, который выполняется, включает, который просто загружает связанные сущности (проверьте this ).

Если вам действительно нужно объединить его с запросом, вы можете сделать что-то вроде этого:

(from property in db.Property 
 select property)
    .Include(pm => pm.PropertyParty)
    .Include(pm => pm.PropertyParty)
    .ThenInclude(x => x.Party)
    .ThenInclude(x => x.PartyMailingAddress)
    .ThenInclude(x => x.PropertyMailingAddress)
    .ToList();

Если вы ищете group by, потому что хотите придерживаться синтаксис запроса, это будет примерно так (но мне кажется, что вся эта работа того не стоит)

var testingResult = (from property in db.Property
                     join propertyParty in db.PropertyParty
                        on property.PropertyId equals propertyParty.PropertyId
                     join party in db.Party
                        on propertyParty.PartyId equals party.PartyId
                     join partyMailingAddress in db.PartyMailingAddress
                        on party.PartyId equals partyMailingAddress.PartyId
                     join propertyMailingAddress in db.PropertyMailingAddress
                        on partyMailingAddress.PartyMailingAddressId equals propertyMailingAddress.PartyMailingAddressId
                     group property by new { property.Field1, x.Field2, ... /* Group by all the property fields */ } into grouped
                     select new Property 
                     {
                        Field1 = grouped.Key.Field1,
                        Field2 = grouped.Key.Field2,
                        ... /* Manually populate all the properties */
                        PropertyParties = grouped.Select(x => x.PropertyParties),
                        ... /* Manually populate all the related entities */
                     }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...