将IQueryable <int>转换为<int> </int> </int>

时间:2011-11-28 08:35:27

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

我想在数据库中选择我的价格水平以与整数进行比较。但它是错误的:运算符'=='不能应用于'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");
 }

 }

6 个答案:

答案 0 :(得分:11)

  

var list_pricelevel

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

我不使用SQL语法(只有lambda),但最后你想要等同于.FirstOrDefaultSingleFirst。基本上排在第一行。

答案 1 :(得分:3)

取代:

if (list_pricelevel == 3) 

使用:

if (list_pricelevel.First() == 3) 

如您所见:http://msdn.microsoft.com/en-us/library/bb291976.aspx,如果您确定有结果或使用FirstOrDefault ...

答案 2 :(得分:2)

当您获得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.

答案 3 :(得分:0)

这是我的建议:

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

如果客户中没有项目满足where c.WebAccount == userName,则可能会出现NullReferenceException。

说明:

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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