1

我的代码中有以下块:

if (!Userpages.AccessableItems.Where(x => { return x.SelectReturns["Permission_ID"] == 1; }).FirstOrDefault().SelectReturns("AllowDeny"))
{
                Response.Redirect("~/NotAuthorized.aspx");              
} 

whereUserpages是自定义业务对象的变量,并且selectReturns是类型的属性,Dictionary<string,object> 但我得到一个错误

“运算符'=='不能应用于'object'和'int'类型的运算符。

我试图将'1'作为对象,但它似乎也不正确“。有人可以帮助我吗?!

4

3 回答 3

7

你的比较看起来像这样

x.SelectReturns["Permission_ID"] == 1

其中左侧是一个对象。所以投入你的objectInt然后做比较。

Convert.ToInt32(x.SelectReturns["Permission_ID"])==o
于 2013-05-27T11:33:39.707 回答
0

如果确定字典查找的输出是 int 类型,则可以执行以下操作:

if (!Userpages.AccessableItems
      .Where(x => (int)(x.SelectReturns["Permission_ID"]) == 1)
      .FirstOrDefault().SelectReturns("AllowDeny")
) {
      Response.Redirect("~/NotAuthorized.aspx");
}

注意:我还使 linq 更简单一些。

于 2013-05-27T11:34:42.633 回答
0

如果x.SelectReturns["Permission_ID"]返回 type 的对象System.Int32,您可以强制转换它:

if(!Userpages.AccessableItems.Where(x => (int)x.SelectReturns["Permission_ID"] == 1).FirstOrDefault().SelectReturns("AllowDeny"))
{
    Response.Redirect("~/NotAuthorized.aspx");              
}

但如果它可以是其他类型或任何自定义类型,则可以直接使用(重载)Equals 方法:

if(!Userpages.AccessableItems.Where(x => x.SelectReturns["Permission_ID"].Equals(1)).FirstOrDefault().SelectReturns("AllowDeny"))
{
    Response.Redirect("~/NotAuthorized.aspx");              
}
于 2013-05-27T11:46:47.507 回答