Я пытаюсь использовать уже существующий класс построения Expression, который я создал при попытке сделать предложение select, но я не уверен, как прикрепить выражение к дереву выражений для Select, я попытался сделать следующее:
var catalogs = matchingCatalogs.Select(c => new
{
c.CatalogID,
Name = EntitiesExpressionHelper.MakeTranslationExpression<Catalog>("Name", ApplicationContext.Instance.CurrentLanguageID).Compile().Invoke(c),
CategoryName = EntitiesExpressionHelper.MakeTranslationExpression<Category>("Name", ApplicationContext.Instance.CurrentLanguageID).Compile().Invoke(c.Category),
c.CategoryID,
c.StartDateUTC,
c.EndDateUTC
});
Но я, очевидно, получаю сообщение об ошибке, в котором говорится, что Entity Framework не может сопоставить Invoke с методом SQL. Есть ли способ обойти это?
К вашему сведению, EntitiesExpressionHelper.MakeTranslationExpression‹T›(строковое имя, int languageID) эквивалентно:
x => x.Translations.Count(t => t.LanguageID == languageID) == 0 ? x.Translations.Count() > 0 ? x.Translations.FirstOrDefault().Name : "" : x.Translations.FirstOrDefault(t => t.LanguageID == languageID).Name
РЕДАКТИРОВАТЬ: я понимаю, что для этого мне нужно использовать ExpressionVisitor, но я не уверен, как использовать ExpressionVisitor для изменения MemberInitExpression, поэтому, если кто-нибудь знает, как это сделать, дайте мне знать.