无法将文本数据类型选为DISTINCT,因为它不具有可比性。没有做不同的操作

时间:2015-04-16 16:20:19

标签: c# sql-server linq

在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()
 }

请指导如何解决此问题。

2 个答案:

答案 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)。