Linq中的错误:无法将文本数据类型选为DISTINCT,因为它不具有可比性

时间:2012-03-19 15:51:26

标签: c#-4.0 .net-4.0 linq-to-entities

我遇到LINQ问题。基本上我需要连接的第三方数据库是使用现在已经折旧的文本字段(我不能改变它),我需要在我的linq中对包含该字段的结果执行distinct子句。

我不想在执行Distinct()之前执行ToList(),因为这会导致数千条记录从我不需要的数据库返回,并且会因为他们收取带宽而烦扰客户端用法。我只需要前15个不同的记录。

无论如何查询如下:

        var query = (from s in db.tSearches
                     join sc in db.tSearchIndexes on s.GUID equals sc.CPSGUID
                     join a in db.tAttributes on sc.AttributeGUID equals a.GUID
                     where s.Notes != null && a.Attribute == "Featured" 
                     select new FeaturedVacancy
                     {
                         Id = s.GUID,
                         DateOpened = s.DateOpened,
                         Notes = s.Notes
                     });
        return query.Distinct().OrderByDescending(x => x.DateOpened);

我知道我可以做一个子查询来做与上面相同的事情(tSearches包含唯一记录)但我宁愿采用更直接的解决方案,因为我需要在整个代码中更改一些类似的查询来获得这个工作

1 个答案:

答案 0 :(得分:0)

没有关于如何做到这一点的答案,所以我选择了第一个建议并首先从tSearch检索了唯一记录,然后构建了一个带有非唯一记录的子查询,并通过此子查询过滤了搜索结果。答案如下:

        var query = (from s in db.tSearches
                     where s.DateClosed == null && s.ConfidentialNotes != null
                     orderby s.DateOpened descending
                     select new FeaturedVacancy
                     {
                         Id = s.GUID,
                         Notes = s.ConfidentialNotes
                     });

        /* Now filter by our 'Featured' attribute */
        var subQuery = from sc in db.tSearchIndexes
                       join a in db.tAttributes on sc.AttributeGUID equals a.GUID
                       where a.Attribute == "Featured"
                       select sc.CPSGUID;

        query = query.Where(x => subQuery.Contains(x.Id));

        return query;