我有自定义代码优先聚合函数:
[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;}
...
}