2011-11-28 113 views
7

我想在数据库中选择我的价格水平以与整数进行比较。但它是错误的:运算符'=='不能应用于'System.Linq.IQueryable'和'int'类型的操作数。 这是我的代码:convert IQueryable <int> to <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"); 
} 

} 

回答

10

VAR list_pricelevel

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

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

+0

不好意思,你能解释清楚吗?我必须添加。首先到我的linq? – Nothing

+0

是的。因为LINQ不知道那里只有一行。对于所有它知道可能有几行,而不是一个'list_pricelevel'值,你会得到它们的多个。 –

+0

感谢TomTom,现在它工作。 – Nothing

0

这里我的建议:

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

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

说明:

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

0

您需要从您的收藏中获得第一件物品。

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

这是一个LINQ,每个查询返回一个IQueryable这样你就可以得到推迟最终结果,直到你真的决定你想要的美丽。换句话说,您可以对另一个查询执行查询:) 因此,为了从查询中获得真实数据,您应该对它执行一个实际返回所需内容的命令。 在你的情况,因为你期待你的查询返回只有一个值,像“FirstOrDefault”,“单”或“第一”任何方法将做诡计

1

当你有LinQ表达式的结果,你将永远有结果集列表。

在你的代码

所以,当你如下查询:

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

的list_pricelevel将在列表即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. 
相关问题