EF核心,表达和功能使用

时间:2020-01-30 19:56:12

标签: entity-framework .net-core

我有一个小表情,如下:

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层时,它将失败。

谢谢!

0 个答案:

没有答案