我试图在我的linq代码中添加一个动态where子句。但是我收到以下错误。其他示例提供了相同的代码,但它们工作正常,因此不确定我是否错过了某些内容。

var toBeReturn = db.estimate.ToList();
if(sname != null)
{
    toBeReturn =  toBeReturn.Where(x => x.estimate_status == sname);
}


错误:


  严重性代码说明项目文件行抑制状态
      错误CS0266无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.List'。存在显式转换(您是否缺少演员表?)


请帮忙

最佳答案

您忘了最后调用.ToList()以获得List<T>,它是toBeReturn变量的类型:

toBeReturn =  toBeReturn.Where(x => x.estimate_status == sname).ToList();


另外,我建议您反转逻辑,以便在sname变量具有值的情况下在SQL Server上过滤结果。在当前的实现中,您将从表中获取所有记录,然后在内存中过滤它们,这不是最有效的方法。

var toBeReturn = (sname != null)
    ? db.estimate.Where(x => x.estimate_status == sname).ToList()
    : db.estimate.ToList();

关于c# - Linq添加动态where子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43841016/

10-13 08:17