代码之家  ›  专栏  ›  技术社区  ›  Rocklan

在linq中对不带AsEnumerable的实体调用自定义方法

  •  0
  • Rocklan  · 技术社区  · 8 年前

    目前我有一些实体框架代码,如下所示:

    return _context
               .MyData
               .OrderBy(x => x.Name)
               .Select(x => new CustomObject { Name = x.Name, Description = x.Description });
    

    CustomObject 编写一个单独的函数,如下所示:

     return _context
               .MyData
               .OrderBy(x => x.Name)
               .Select(x => CustomObjectFactory.Create(x));
    

    但当我这么做的时候

    Linq to entities无法识别该方法

    错误。我知道我可以打个电话给 AsEnumerable() :

    return _context
              .MyData
              .OrderBy(x => x.Name)
              .AsEnumerable()
              .Select(x => CustomObjectFactory.Create(x));
    

    对于奖励积分,我还想知道如何做到这一点:

     return _context
                .MyData
                .OrderBy(x => x.Name)
                .CreateCustomObject()
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Shadow    8 年前

    你不能这么做,因为除非你打电话来 AsEnumerable 所有这些代码都将转换为数据库查询。此select中的代码不是常规代码,而是 expression ,转换为sql语句。数据库不知道您的自定义方法-它只知道实体框架供应商定义的一些方法,有些库可以调用返回基元类型的函数。

    打电话后 数不清的 查询的结果是具体化的,所以您可以使用常规的c#方法。