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]'的对象。”}
答案 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();