我想在数据库中选择我的价格水平以与整数进行比较。但它是错误的:运算符'=='不能应用于'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");
}
}
答案 0 :(得分:11)
var list_pricelevel
根据定义,这不是int
,因为可以返回多行。
我不使用SQL语法(只有lambda),但最后你想要等同于.FirstOrDefault
或Single
或First
。基本上排在第一行。
答案 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”都可以做到这一点