.NET Core EF Выберите объект, к которому относится отношение - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь выяснить, как получить Модели из DBSet, где Модель имеет реляционную Модель с определенным свойством.

Пример:

List<Person> persons = context.Person.Where(p => p.Properties.Where(p => p.CountryCode == 1)).ToList();

Человек может иметь несколько свойств, и я хочу получить только список людей, которые имеют свойства в определенной стране.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

На самом деле вы можете попробовать что-то подобное,

_unitOfWork.GetRepository<AdvertTrade>()
                .GetQueryable()
                .AsNoTracking()
                // Make sure the advert trade does not have any related to this user
                .Include(at => at.UserRatings)
                .Where(at => at.Id.Equals(userRating.AdvertTradeId))
                .Any(at => at.UserRatings.Any(ur => ur.CreatedBy.Value.Equals(userId) && ur.DeletedOnUtc == null))

Вместо рассылки спама. Где () я использовал Any () для поиска вложенных требований.

Для создания вещейболее ясно, вот примерный фрагмент кода, старый код закомментирован, и вам нужно сфокусировать на комментированном коде (я не реорганизовал его, потому что он плохой, а потому, что моя ERD изменилась).

var payload = _unitOfWork.GetRepository<CurrencySource>()
                .GetQueryable()
                .AsNoTracking()
                // Make sure all currency sources are not disabled or deleted
                .Where(cs => cs.IsEnabled && cs.DeletedOnUtc == null)
                //.Include(x=>x.CurrencyPairComponents)
                //.ThenInclude(x=>x.CurrencyPair)
                //.ThenInclude(x=>x.PartialCurrencyPairs)
                //.Include(cs => cs.CurrencyPairs)
                //.ThenInclude(cp => cp.PartialCurrencyPairs)
                //.ThenInclude(pcp => pcp.Currency)
                //.Where(cs => cs.CurrencyPairComponents.Select(x=>x.CurrencyPair)
                //    // Make sure all currencypairs are not disabled or deleted
                //    .Any(cp => cp.IsEnabled && cp.DeletedOnUtc == null
                //               &&
                //               // Make sure none of the currency pair's partial currency pair is not disabled or deleted
                //               cp.PartialCurrencyPairs
                //                   .Any(pcp => pcp.Currency.IsEnabled && pcp.Currency.DeletedOnUtc == null)))
                .Select(cs => new
                {
                    id = cs.Id,
                    abbreviation = cs.Abbreviation,
                    name = cs.Name
                    //currencyPairs = cs.CurrencyPairComponents
                    //    .Select(cp => new
                    //    {
                    //        id = cp.Id,
                    //        partialCurrencyPairs = cp.CurrencyPair.PartialCurrencyPairs
                    //            .Select(pcp => new
                    //            {
                    //                currencyId = pcp.CurrencyId,
                    //                currency = new
                    //                {
                    //                    abbrv = pcp.Currency.Abbrv,
                    //                    currencyTypeId = pcp.Currency.CurrencyTypeId,
                    //                    currencyType = new
                    //                    {
                    //                        typeShortForm = pcp.Currency.CurrencyTypeId.GetDisplayName(),
                    //                        name = pcp.Currency.CurrencyTypeId.GetDisplayName()
                    //                    },
                    //                    name = pcp.Currency.Name,
                    //                    walletTypeId = pcp.Currency.WalletTypeId
                    //                },
                    //                isMain = pcp.IsMain
                    //            })
                    //    })
                });

Обратите внимание, что я вложил несколько объявлений LINQ.

.Where(cs => cs.CurrencyPairComponents.Select(x=>x.CurrencyPair)
                    // Make sure all currencypairs are not disabled or deleted
                    .Any(cp => cp.IsEnabled && cp.DeletedOnUtc == null
                               &&
                               // Make sure none of the currency pair's partial currency pair is not disabled or deleted
                               cp.PartialCurrencyPairs
                                   .Any(pcp => pcp.Currency.IsEnabled && pcp.Currency.DeletedOnUtc == null)))
0 голосов
/ 26 сентября 2018

Вы явно пытаетесь присоединиться.Я думаю, что вы хотите (псевдо-код)

var persons = (from p in Context.Person
              join pr in Context.Property on p.ID equals pr.PersonID
              where pr.CountryCode == 1
               select p).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...