Я пытаюсь использовать уже существующий класс построения 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. Есть ли способ обойти это?
FYI, EntitiesExpressionHelper.MakeTranslationExpression (имя строки, 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, поэтому, если кто-нибудь знает, как это сделать, дайте мне знать.