我对这段代码有疑问。我使用LinQ实体
Dictionary<string, int> dictionary = new Dictionary<string, int>();
using (var db = new DiagEntities())
{
PropertyInfo[] properties = typeof(DiagTab).GetProperties();
foreach (PropertyInfo property in properties)
{
string name = property.Name;
if (name == "ID_Diag") { continue; } // no column 1 and 2
if (name == "Reponse") { continue; }
Func<DiagTab, byte> accessor = (Func<DiagTab, byte>)property
.GetMethod
.CreateDelegate(typeof(Func<DiagTab, byte>));
int sum = db.DiagTabs.Sum(p => accessor(p)); // invoke error
dictionary.Add(name, sum);
}
bouba.DataSource = dictionary;
bouba.DataBind();
汇编我在这一行上出现了这个错误,我不明白为什么:
int sum = db.DiagTabs.Sum(p => accessor(p))
节点类型&#39;调用&#39; LINQ to Entities
不支持LINQ表达式
你能帮我解决这个问题吗?我应该使用LINQkit还是其他?
答案 0 :(得分:1)
您的代码存在两个主要问题。
首先,Enumerable
和Queryable
都没有Sum
的{{1}}方法,因此最接近的方法是byte
。
第二个也是更重要的,LINQ to Entities主要使用int
,后者使用Queryable
(与仅使用Expression<Func<...>>
的{{1}}相比)。您的代码正在尝试通过从func创建表达式来组合它们,但正如错误消息所述,这是不受支持的。
解决方案是使用Enumerable
命名空间中的类/方法构建表达式 - Expression.Parameter用于创建参数,Expression.Property用于属性访问器,{{3更改类型和Expression.Convert将它们放在一起,就像这样
Func<...>