我有一个小表情,如下:
public static readonly Expression<Func<MyType, MyResponse>> TypeToResponse = (x) => new MyResponse()
{
Id = x.Id,
ListObjectResponses = x.ListObjects != null
? x.ListObjects.Where(y => cat.IsEnabled)
.Select(y => ListObjectToListObjectResponse(y))
.ToArray()
: null
};
public static readonly Func<ListObject, ListObjectResponse> ListObjectToListObjectResponse = (x) => new ListObjectResponse()
{
Id = x.Id
};
但是通过Func不能正常工作。
将func核心直接嵌入到Expression中时,它可以工作:
public static readonly Expression<Func<MyType, MyResponse>> TypeToResponse = (x) => new MyResponse()
{
Id = x.Id,
ListObjects = x.ListObjects != null
? x.ListObjects.Where(y => cat.IsEnabled)
.Select(y => new ListObjectResponse()
{
Id = y.Id
})
.ToArray()
: null
};
由于在MyType中ListObjects的类型为ICollection,因此我必须在此处使用func。
我最想念的是什么?我在函式中分解了大量代码,以使生成响应类变得更加容易,而且我不想不必在任何地方都扁平化(从而重复代码)。
编辑:在我的用例中,我在表达式中使用了另一个嵌套的func(表达式从func加载集合,该函数还在嵌套对象的属性中加载子集合)。 一旦删除嵌套的功能(仅1级功能),它就会起作用。 当我嵌套了func层时,它将失败。
谢谢!