【发布时间】:2014-12-29 19:43:45
【问题描述】:
我正在尝试使用 EF6 执行查询。我的 sql 格式查询是这样的:
/****** Script for SelectTopNRows command from SSMS ******/
SELECT
[SUBJECT],COUNT(SUBJECT)
FROM [PGC].[dbo].[QC] group by [SUBJECT]
效果很好。
主题是字符串类型。
但我将查询翻译为 EF,如您在此处看到的:
listDataSource =
db.QCs.Where(j => j.SUBJECT != null).ToList().GroupBy(i => new {i.SUBJECT}).Select(m => new chart()
{
date = m.Key.SUBJECT,
Count = m.Count(i=>i.SUBJECT).ToString()
}).ToList();
m.Count(i=>i.SUBJECT) 返回错误:can't convert expression type string to return type bool
最好的问候
【问题讨论】:
-
您的 SUBJECT 字段是字符串,您不能计算字符串,只能计算布尔表达式。它等同于 .Where(i => {some boolean expression}).Count()
-
我的问题是,如果不可能,为什么sql可以计算它?
-
因为 LINQ 不直接转换为 SQL,反之亦然。在一个中完全有效的表达式在另一个中没有任何意义。这就是 LINQ 的主要罪过:它看起来像 SQL,行为不同,它的真正本质是数据流的功能处理(通过称为 map、filter、flatMap 等的方法)。如果您真的想知道您的 LINQ 如何转换为 SQL,请使用 LinqPad。
标签: c# mysql sql-server entity-framework