asp.net中的列表linq查询不起作用

时间:2012-12-10 06:17:40

标签: asp.net linq

  const string keyword = "manoj";
        rsp.DataSource = company.GetCompanySearch(keyword);
        rsp.DataBind();

    public List<Company> GetCompanySearch(string keyword)
{
    using (var context = huntableEntities.GetEntitiesWithNoLock())
    {
        List<Company> query = context.Companies.ToList();
        if (!string.IsNullOrEmpty(keyword))
        {
            keyword = keyword.ToLower();
            query =  (List<Company>) query.Where(u=>u.CompanyName.Contains(keyword)
                                           || u.EmailAdress.Contains(keyword)
                                           ||u.MasterCountry.Description.Contains(keyword)
                                           ||u.MasterIndustry.Description.Contains(keyword)
                                           ||u.CompanyDescription.Contains(keyword)
                                           ||u.CompanyHeading.Contains(keyword));
        }
        return query.ToList();
    }
}

以下代码抛出以下异常: {“无法转换类型为'WhereListIterator 1[Data.Company]' to type 'System.Collections.Generic.List 1 [Data.Company]'的对象。”}

1 个答案:

答案 0 :(得分:1)

&#34;(列表)query.Where()&#34;等于&#34;(列表)(query.Where())&#34;,所以这将抛出该异常。 应该使用query.Where()。ToList()而不是显式强制转换。

此外,最好不要放&#34;列表查询= context.Companies.ToList();&#34;在你的&#34; if&#34;之前声明。在这种情况下,无论关键字是否为空,它都会将所有记录查询到内存中,这将导致性能问题。 可以改为

    IQueryable<Company> query = context.Companies; //Remove ToList()
    if (!string.IsNullOrEmpty(keyword))
    {
        keyword = keyword.ToLower();
        // Remove cast
        query =  query.Where(u=>u.CompanyName.Contains(keyword)
                                       || u.EmailAdress.Contains(keyword)
                                       ||u.MasterCountry.Description.Contains(keyword)
                                       ||u.MasterIndustry.Description.Contains(keyword)
                                       ||u.CompanyDescription.Contains(keyword)
                                       ||u.CompanyHeading.Contains(keyword));
    }
    return query.ToList();