不同列表LINQ查询

时间:2015-01-15 00:45:34

标签: c# linq

尝试在LINQ中返回一个不同的SubString列表。

这将返回列表,但是有100个带有子字符串的记录。我只想返回不同的列表。

var query = from b in db.Certificates
            select b.CertificateNumber.Substring(0,4);

ViewBag.BoxNumber = new SelectList(query.ToList());

我尝试在

中添加distinct
select b.CertificateNumber.Substring(0,4).Distinct();

但它扔了

  
    

DbDistinctExpression需要一个集合参数。

  

3 个答案:

答案 0 :(得分:6)

您目前正在这样做的方式,它将尝试对每个证书编号的前四个字符进行区分(删除重复的字符),然后返回 all 的结果。您可能会收到错误,因为您使用的驱动程序无法以这种方式创建有效的SQL查询。

相反,在调用Distinct之前用括号括起查询的整个第一部分,如下所示:

var query = (from b in db.Certificates
             select b.CertificateNumber.Substring(0,4)).Distinct();

或者,使用方法语法而不是查询和方法语法的混合:

var query = db.Certificates
              .Select(cer => cer.CertificateNumber.Substring(0,4))
              .Distinct();

答案 1 :(得分:1)

我明白了

ViewBag.BoxNumber = new SelectList(query.ToList().Distinct());

答案 2 :(得分:1)

 var certificatesList = (from b in db.Certificates
                    select b.CertificateNumber.Substring(0,4)).Distinct().ToList();