在Select语句中调用表达式-LINQ to Entity框架
我尝试使用在尝试执行select子句时创建的已存在表达式构建类,但我不确定如何将表达式附加到select的表达式树,我尝试执行以下操作:在Select语句中调用表达式-LINQ to Entity框架,linq,linq-to-entities,lambda,linq-expressions,Linq,Linq To Entities,Lambda,Linq Expressions,我尝试使用在尝试执行select子句时创建的已存在表达式构建类,但我不确定如何将表达式附加到select的表达式树,我尝试执行以下操作: var catalogs = matchingCatalogs.Select(c => new { c.CatalogID, Name = EntitiesExpressionHelper.MakeTranslationExpression&l
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
});
编辑:我意识到我需要使用ExpressionVisitor来完成此操作,但我不确定如何使用ExpressionVisitor来更改MemberInitExpression,因此如果有人知道如何完成此操作,请告诉我。您需要在VAR中捕获表达式。您将无法使用匿名类型。总的想法是,这是可行的:
Expression<Func<Foo, Bar>> exp = GenExpression();
var q = matchingCatalogs.Select(exp);
第一个函数将GenExpression
的结果愉快地传递给L2E。第二个函数试图将GenExpression
本身传递给L2E,而不是传递结果
因此,需要引用与表达式类型相同的变量。这些类型不能隐式类型化,因此您的结果类型需要一个实类型 问题不是匿名类型,问题是我需要在另一个表达式中注入一个表达式,我宁愿这样做,而不必做整个MemberInitExpression的事情你可能认为我的答案与你的问题无关,但你的代码不起作用,是吗?我根本不是这么说的,我只是说这是另一个问题的解决方案。我面临的问题基本上是操纵现有的表达式树。你有没有找到解决方法?
Expression<Func<Foo, Bar>> exp = GenExpression();
var q = matchingCatalogs.Select(exp);
var q = matchingCatalogs.Select(GenExpression());