На самом деле вы можете попробовать что-то подобное,
_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)))