Используйте какую-то вспомогательную функцию. В запросе EF Select для создания подзапроса.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Используйте какую-то вспомогательную функцию. В запросе EF Select для создания подзапроса.

Сообщение Anonymous »

У меня есть несколько таблиц, которые обрабатывают различные виды переводов для моих сущностей, и эти таблицы связываются через отношения с другими сущностями.
Я использую подзапрос для прямого доступа к таблицам переводов, и это нормально. Этот подзапрос в каждом случае очень похож и занимает несколько строк кода, которые в идеале я бы хотел перенести в какой-нибудь помощник.
Итак, это примеры моих типичных запросов 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)
Где StaticTranslation — статический класс с этим методом:

Код: Выделить всё

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() ?? "";
}
Но с этим решением EF пытается оценить этот подзапрос отдельно (или рассматривает это как разные вызовы, я не уверен) и выдает ошибку типа:
" Не удалось перевести выражение LINQ..."
Я также пытался переписать этот помощник, чтобы он возвращал "IQueriable" вместо "строки" и работал в режиме "FirstOrDefault" снаружи, но проблема это одно и то же.
У кого-нибудь есть идеи, как сказать EF не пытаться перевести эти подзапросы и рассматривать их как часть одного и того же запроса?

Подробнее здесь: https://stackoverflow.com/questions/787 ... e-subquery
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»