Я использую подзапрос для прямого доступа к таблицам переводов, и это нормально. Этот подзапрос в каждом случае очень похож и занимает несколько строк кода, которые в идеале я бы хотел перенести в какой-нибудь помощник.
Итак, это примеры моих типичных запросов ef:
Итак, это примеры моих типичных запросов ef:
p>
Это работает нормально, но, как видите, часть перевода заняла место, от которого мне не хотелось бы избавляться:
Код: Выделить всё
var items = await _context.Users
.Select(x => new UserModel()
{
Id = x.Id,
FirstName = x.FirstName,
...,
Type = _context.StaticTranslations
.Where(st => st.Key == x.TypeNameKey && st.LanguageId == 2)
.OrderByDescending(st => st.Version)
.Select(st => st.Value)
.FirstOrDefault() ?? ""
})
.ToListAsync(cancellationToken);
Код: Выделить всё
Type = _context.StaticTranslation(x.TypeNameKey, 2)
Код: Выделить всё
public static string StaticTranslation(this DbContextHandler context, string key, int languageId)
{
return context.StaticTranslations
.Where(st => st.Key == key && st.LanguageId == languageId)
.OrderByDescending(st => st.Version)
.Select(st => st.Value)
.FirstOrDefault() ?? "";
}
" Не удалось перевести выражение LINQ..."
Я также пытался переписать этот помощник, чтобы он возвращал "IQueriable" вместо "строки" и работал в режиме "FirstOrDefault" снаружи, но проблема это одно и то же.
У кого-нибудь есть идеи, как сказать EF не пытаться перевести эти подзапросы и рассматривать их как часть одного и того же запроса?
Подробнее здесь: https://stackoverflow.com/questions/787 ... e-subquery