Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Select语句中调用表达式-LINQ to Entity框架_Linq_Linq To Entities_Lambda_Linq Expressions - Fatal编程技术网

在Select语句中调用表达式-LINQ to Entity框架

在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

我尝试使用在尝试执行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
                });

编辑:我意识到我需要使用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());