c#使用where语句列出

时间:2013-05-04 06:52:54

标签: c# sql asp.net-mvc-3 filtering

我的应用程序是使用Linq-to-Sql的asp.net MVC。我正在尝试使用以下内容过滤视图。

我已经使用以下方法将过滤器添加到我的SQL Server视图中:

WHERE (dbo.Client.Recstatus IS NULL) OR (dbo.Client.Recstatus = 0)

当我在SQL Server Management Studio中运行它时,它运行良好,但我仍然可以看到我的应用程序中的条目。

我尝试使用以下方法在我的存储库中再次过滤它:

List<vw_Client_info> searchResult = new List<vw_Client_info>().Where(c=> c.Recstatus != 1);

Recstatussmallint

我收到以下错误:

  

无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.List'。存在显式转换(您是否错过了演员?)

非常感谢您的协助,谢谢您。

4 个答案:

答案 0 :(得分:2)

似乎你忘记了最后使用ToList()方法。试试这个:

List<vw_Client_info> searchResult = 
    new List<vw_Client_info>().Where(c=> c.Recstatus != 1).ToList();

答案 1 :(得分:2)

两个问题

  1. new List<vw_Client_info>()是新列表,没有数据
  2. 您必须在声明结尾处致电.ToList()
  3. 您可以尝试以下内容

    using (YourDatacontext context= new YourDatacontext(connStr))
    {
        List<vw_Client_info> searchResult = 
              context.vw_Client_infos.Where(c=> c.Recstatus != 1).ToList();
    }
    

答案 2 :(得分:0)

包含Where的可枚举方法不返回List,而是返回IEnumerable

因此您可以将代码修改为

IEnumerable<vw_Client_info> searchResult = 
          new List<vw_Client_info>().Where(c=> c.Recstatus != 1);

或者

var searchResult = 
         new List<vw_Client_info>().Where(c=> c.Recstatus != 1);

与上面相同(编译器为您导出类型)

或者

List<vw_Client_info> searchResult = 
         new List<vw_Client_info>().Where(c=> c.Recstatus != 1).ToList();

答案 3 :(得分:0)

这是因为您从Select中返回了一个匿名类型,并且您正试图将其存储在List<vw_Client_info>中。投影总是创建匿名类型。 这样你就可以在IEnumerable存储或在尾部使用ToList()