Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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
C# 重用Linq select子句中的表达式(查询格式)_C#_.net_Linq_Linq To Sql - Fatal编程技术网

C# 重用Linq select子句中的表达式(查询格式)

C# 重用Linq select子句中的表达式(查询格式),c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,我有一个将一种类型的对象转换为另一种类型的表达式。表达方式如下: public Expression<Func<SQLRepository.ActionType, Model.ActionType>> DBActionTypeToActionType = (SQLRepository.ActionType at) => new Model.ActionType() { ID = at.OID, DisplayName = at.DisplayName

我有一个将一种类型的对象转换为另一种类型的表达式。表达方式如下:

public Expression<Func<SQLRepository.ActionType, Model.ActionType>> DBActionTypeToActionType =
(SQLRepository.ActionType at) => new Model.ActionType()
{
    ID = at.OID,
    DisplayName = at.DisplayName
};
但我想这样使用它:

var linq = (from at in dc.SQLRepositoryDC.ActionTypes select at).Select(DBActionTypeToActionType);
var linq = (from at in dc.SQLRepositoryDC.ActionTypes select DBActionTypeToActionType.Compile().Invoke(at));
我已经找了几天了,我只能在Where子句中找到这样做的参考。似乎如果我能够使用函数调用来实现这一点,那么应该可以使用查询语法

使用查询语法很重要的原因是,所选的一些对象由许多子对象组成,并且尝试将它们与函数表示法链接在一起将更难编写和维护

似乎如果我能够使用函数调用来实现这一点,那么应该可以使用查询语法

那不是真的。查询表示法始终通过lambda表达式进行。比如说

from x in y select z
最终成为

y.Select(x => z)
这意味着,如果您已经有了一个表达式树,希望将其作为参数直接传递给
Select
,则不能使用查询表达式,因为存在这种额外的间接级别

现在,可用的选项取决于需要应用预定义表达式的位置。您可以始终在源中使用它,然后继续查询:

var query = from foo in dc.ActionTypes.Select(DBActionTypeToActionType)
            where foo.Stuff
            select foo.Other;
或者在最后使用它很容易:

var query = (from bar in dc.ActionTypes
             where bar.Stuff
             select bar).Select(DBActionTypeToActionType);

那有什么帮助吗?

是的,那很有帮助。在加入该表之前,我没有考虑将select函数应用于该表,在收集了所有数据之后,我一直在尝试这样做。非常感谢你。