【发布时间】:2015-04-17 01:00:32
【问题描述】:
在 SQL Server 表中,“问题”列之一的数据类型为“文本”。
现在,当我在 sql 中进行查询时,使用强制转换为 varchar。
现在,在 linq 中,以下是检索特定结果数据的查询。
问题是,当我尝试在FOR 或FOREACH 循环中迭代结果集时,它给了我以下错误。我用谷歌搜索了,但它说,当做不同但我没有做不同的操作时会发生这种情况。
The text data type cannot be selected as DISTINCT because it is not comparable
from t in db.Table
group t by new
{
t.Category,
t.Question
} into g
order by g.Category
select new
{
CategoryName = t.FirstOrDefault().Category, //might be required to handle null here
Question = t.FirstOrDefault().Question, //might be required to handle null here
TotalCount = t.Count(),
AnsLessEqual3 = t.Where(d => d.Answer<=3).Count(),
Ans5 = t.Where(d => d.Answer = 5).Count(),
Ans789 = t.Where(d => d.Answer = 7 || d.Answer = 8 || d.Answer = 9).Count()
}
请指导如何解决此问题。
【问题讨论】:
-
GROUP BY 的工作方式类似于 DISTINCT。我假设您的
group表达式之一是 TEXT 数据类型 -Question最有意义。是否有一个您可以分组的非文本字段(问题 ID?)? -
是的,“question”是group by子句和select子句中的字段。
-
然后我会重新排列您的查询,这样您就不会按文本字段进行分组。
-
你能做到吗?我需要可以通过上述查询得到的相同结果。
-
我对 linq 一无所知,你是不是某个地方的 select 语句?
标签: c# sql-server linq