我正在尝试使用我在尝试执行 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
});
但我显然收到错误消息,指出实体框架无法将 Invoke 映射到 SQL 方法。有办法解决这个问题吗?
仅供参考,EntitiesExpressionHelper.MakeTranslationExpression(string name, 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,因此如果有人知道如何完成此操作,请告诉我。