首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DbExpressionBinding需要一个带有集合ResultType的输入表达式。

DbExpressionBinding需要一个带有集合ResultType的输入表达式。
EN

Stack Overflow用户
提问于 2014-09-03 20:26:06
回答 1查看 6.1K关注 0票数 3

我希望将表按列分组并获取计数,然后使用结果创建字典。最后一条语句返回

DbExpressionBinding需要一个带有集合ResultType的输入表达式。

错误意味着什么?

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-03 20:40:33

您的GroupBy调用稍有错误-它忽略了cnt参数。它应该写成这样:

代码语言:javascript
复制
var b = a.GroupBy(x => x.RecordType, (k, cnt) => new { RecType = k, cnt = cnt.Count() });

这条异常信息是我所见过的更无益的信息之一。问题是,当您在RecordType (别名为k)的C#表达式中调用C#时,它编译得很好,因为string实现了IEnumerable<char>。不幸的是,当EF试图将该表达式转换为SQL时,它需要能够使用无法在count上工作的SQL string运算符--它需要对一系列行进行操作。这导致了您收到的某种神秘异常。

顺便说一句,分配给c的查询也不能工作-- Tuple.Create不能转换为SQL,ObjTypes[x.RecType]也不能。您需要在变量ToList上调用b,然后才能对结果进行所有额外的整形。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25653037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档