DbExpressionBinding需要一个具有集合ResultType的输入表达式
本文关键字:集合 ResultType 表达式 输入 一个 DbExpressionBinding | 更新日期: 2023-09-27 18:20:29
我想按列对表进行分组并获取计数,然后使用结果创建字典。最后一条语句返回的错误
DbExpressionBinding需要一个具有集合ResultType的输入表达式。
这个错误意味着什么?
var a = context.Table;
var b = a.GroupBy(x => x.RecordType, (k, cnt) => new { RecType = k, cnt = k.Count() });
var c = b.Select(x =>
new KeyValuePair<string, Tuple<Type, int>>(
x.RecType, Tuple.Create(ObjTypes[x.RecType], x.cnt)))
.ToDictionary(x => x.Key, x => x.Value);
您的GroupBy
调用有点错误-它忽略了cnt
参数。应该这样写:
var b = a.GroupBy(x => x.RecordType, (k, cnt) => new { RecType = k, cnt = cnt.Count() });
这个异常消息是我见过的最没有帮助的消息之一。问题是,当您在C#表达式中对RecordType
(别名为k
)调用Count
时,它编译得很好,因为string
实现了IEnumerable<char>
。不幸的是,当EF试图将该表达式转换为SQL时,它需要能够使用SQL count
运算符,而该运算符不能在string
上工作——它需要对一系列行进行操作。这会导致您收到一个有点神秘的异常。
顺便说一句,分配给c
的查询也不起作用——Tuple.Create
不能翻译成SQL,ObjTypes[x.RecType]
也不能。您需要在变量b
上调用ToList
,然后才能对结果进行所有其他整形。