在Lin 6中使用Linq to Entities和用户定义的聚合函数出错(代码优先)

时间:2016-04-05 22:41:29

标签: c# entity-framework linq

我有自定义代码优先聚合函数:

[DbFunction("CodeFirstDatabaseSchema", "Custom")]
public static int? Custom(this IEnumerable<ModelClass> g, Expression<Func<ModelClass, int>> field) {
    throw new NotSupportedException();
}

然后我尝试使用自定义函数进行查询:

DbSet<ModelClass> models = ...;

var query = from a in models
                group a by a.ColumnName into newgroup
                select newgroup.Custom(g => g.ColumnName);

string sql = query.ToString();   // error "the linq expression node type 'lambda' is not supported in linq to entities."

在运行时,我得到错误“Linq表达式节点类型'lambda'在linq中不支持实体。”奇怪的是,如果我使用“newGroup.Sum(g =&gt; g.ColumnName)”,查询将按预期工作。 Sum的签名似乎与我的自定义函数几乎相同,所以我不确定我做错了什么

由于机密性,我无法发布ModelClass的确切代码,但它只是一个基本的实体类,即:

using System.ComponentModel.DataAnnotations.Schema

[Table("name")]
public class ModelClass {
   public long id {get; set;}
   public string field {get; set;}

   ...
}

0 个答案:

没有答案