select 句を実行しようとしたときに作成した既存の Expression 構築クラスを使用しようとしていますが、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>(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 を変更する方法がわからないため、これを達成する方法を誰かが知っている場合はお知らせください。