J'essaie d'utiliser une classe de construction Expression existante que j'ai créée en essayant de faire une clause select, mais je ne suis pas sûr de savoir comment attacher l'expression à l'arbre d'expression pour la sélection, j'ai essayé de faire ce qui suit:Appel d'une expression dans une instruction Select - LINQ to Entity Framework
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
});
mais je reçois de toute évidence l'erreur indiquant que le Entity Framework ne peut pas mapper Invoke à une méthode SQL. Y a-t-il un moyen de contourner ce problème?
Pour votre information, EntitiesExpressionHelper.MakeTranslationExpression <T> (nom de chaîne, int languageID) équivaut à:
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
EDIT: Je me rends compte que je dois utiliser un ExpressionVisitor pour ce faire, mais je suis Je ne sais pas comment utiliser un ExpressionVisitor pour modifier l'MemberInitExpression, alors si quelqu'un sait comment accomplir cela, faites le moi savoir.
Avez-vous déjà trouvé une solution à ce problème? – Rabbi