【问题标题】:convert IQueryable<int> to <int>将 IQueryable<int> 转换为 <int>
【发布时间】:2012-01-07 18:14:09
【问题描述】:

我想在数据库中选择我的价格水平以与整数进行比较。但这是错误的:运算符“==”不能应用于“System.Linq.IQueryable”和“int”类型的操作数。 这是我的代码:

if (Request.IsAuthenticated){

CustomerModels cm = new CustomerModels();

string userName = Page.User.Identity.Name;
var list_pricelevel = from c in cm.DataContext.Customers
                      where c.WebAccount == userName
                       select c.PriceLevel;
 if (list_pricelevel == 3) {
    Response.Write("Welcome");
 }

 }

【问题讨论】:

    标签: c# asp.net html asp.net-mvc


    【解决方案1】:

    var list_pricelevel

    这是根据定义而不是int,因为可以返回不止一行。

    我不使用 SQL 语法(仅使用 lambda),但最后您需要等效于 .FirstOrDefaultSingleFirst。基本上占了第一排。

    【讨论】:

    • 对不起,你能解释清楚吗?我必须将 .First 添加到我的 linq 吗?
    • 是的。因为 LINQ 无法知道那里会有一排。据它所知,可能有几行,而不是一个 list_pricelevel 值,你会得到多个。
    【解决方案2】:

    替换:

    if (list_pricelevel == 3) 
    

    与:

    if (list_pricelevel.First() == 3) 
    

    如您在此处看到的:http://msdn.microsoft.com/en-us/library/bb291976.aspx,如果您确定有结果或使用FirstOrDefault...

    【讨论】:

      【解决方案3】:

      这是我的建议:

       if (list_pricelevel.First() == 3) 
       { 
            Response.Write("Welcome");  
       }
      

      如果客户中没有满足where c.WebAccount == userName 的项目,这可能会引发 NullReferenceException。

      解释:

      list_pricelevel 是满足您的 where 子句的 IEnumerable 项目。

      【讨论】:

        【解决方案4】:

        您需要从您的收藏中获取第一个项目。

        if (list_pricelevel.First() == 3) {
           Response.Write("Welcome");
        }
        

        【讨论】:

          【解决方案5】:

          这是 Linq 的美妙之处,即每个查询都返回一个 IQueryable,因此您可以推迟获得最终结果,直到您真正决定想要什么。换句话说,您可以对另一个查询执行查询:) 因此,为了从查询中获取真实数据,您应该对其执行一个实际返回所需内容的命令。 在您的情况下,由于您希望查询只返回一个值,因此“FirstOrDefault”、“Single”或“First”之类的任何方法都可以解决问题

          【讨论】:

            【解决方案6】:

            当您获得 LinQ 表达式的结果时,您将始终拥有结果集列表。

            所以在你的代码中查询如下:

            var list_pricelevel = from c in cm.DataContext.Customers where c.WebAccount == userName select c.PriceLevel;

            list_pricelevel 将采用 List 即 IQueryable 列表的形式,

            所以你只需要得到一个元素来检查一个元素

            所以使用下面的代码:

            if (list_pricelevel.Single() == 3) 
            { 
              Response.Write("Welcome");  
            }
            
            or
            
            if (list_pricelevel.First() == 3) 
            { 
              Response.Write("Welcome");  
            }
            
            
            both the above code gives you only one result set value so you can equate with 3 for validation.
            

            【讨论】:

              猜你喜欢
              • 2019-12-29
              • 2020-07-03
              • 1970-01-01
              • 2018-04-28
              • 2011-05-13
              • 1970-01-01
              • 1970-01-01
              • 2019-06-18
              • 1970-01-01
              相关资源
              最近更新 更多