在SQL Server表中,其中一个是columne"问题"数据类型为" text"。
现在,当我在sql中进行查询时,请使用强制转换为varchar。
现在,linq以下是检索特定结果数据的查询。
问题是,当我尝试在FOR
OR 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()
}
请指导如何解决此问题。
答案 0 :(得分:2)
你必须让LINQ将你的文本字段转换为varchar,抓住整个Substring就可以了。此外,你应该坚持你的小组,否则你将总结整个表,假设LINQ允许它。
from t in db.Table
group t by new
{
Category = t.Category.Substring(0),
t.Question
} into g
orderby g.Key.Category
select new
{
CategoryName = g.Key.Category,
Question = g.Key.Question,
TotalCount = g.Count(),
AnsLessEqual3 = g.Count(d => d.Answer <= 3),
Ans5 = g.Count(d => d.Answer = 5),
Ans789 = g.Count(d => d.Answer = 7 || d.Answer = 8 || d.Answer = 9)
}
答案 1 :(得分:-1)
自2005年以来,不推荐使用text数据类型。您不应该使用它。与之合作是一种痛苦。您应该使用varchar(max)。我建议改为将表改为varchar(max)。