如何过滤通用列表?

时间:2016-04-18 15:43:22

标签: c# linq generics

我在下面的代码工作正常,但是当我尝试添加Where子句来过滤集合时,我得到错误:

  

'对象'不包含' Where'的定义没有延伸   方法'哪里'接受类型'对象'的第一个参数。可能   发现(您是否缺少using指令或程序集引用?)

我尝试将对象转换为OfType<Certification>但失败了。我也试过转换为IQueryable,但是失败并出现了类似的错误。所以我检查了我的认证变量的类型,它是"System.Collections.Generic.List``1[[GainesTrader_WCF.Certification, GainesTrader WCF,"。你能看到解决方案吗?

    GainesTrader_WCF.Service1 client = new GainesTrader_WCF.Service1();
    object certifications = client.GetCertifications();
    //var filtered = certifications.OfType<Certification>().Where(o => o.CertificationAcronym == "MCSD");
    var filtered = certifications.Where(o => o.CertificationAcronym == "MCSD");
    Certifications.DataSource = filtered;
    Certifications.DataBind();

2 个答案:

答案 0 :(得分:1)

您应该将certifications变量转换为IEnumerable<Certification>类型:

var filtered = certifications
  .OfType<IEnumerable<Certification>>()
  .Where(o => o.CertificationAcronym == "MCSD");

 var certifications = (IEnumerable<Certification>)client.GetCertifications();
 var filtered = certifications.Where(o => o.CertificationAcronym == "MCSD");

答案 1 :(得分:1)

为什么类型为对象的证书变量?查看WCF代理并验证返回类型。设置代理时,visual studio应该已经下载了所有相关类型。

此外,这是第一次,我看到有人将Where扩展方法应用于Object类型。它甚至没有意义。