Asp.net 错误:Linq中的用户代码未处理FormatException如何解决?

Asp.net 错误:Linq中的用户代码未处理FormatException如何解决?,asp.net,visual-studio-2008,linq,entity-framework,c#-3.0,Asp.net,Visual Studio 2008,Linq,Entity Framework,C# 3.0,请看下面的代码:FormatException未被用户代码处理 代码: satis.KDV = Decimal.Parse((from o in genSatisctx.Urun where o.ID == UrunID select o.Kdv).ToString()); 如何重写linq查询?您正在对查询而不是单个结果调用ToString。即使您可能只期望一个值与查询匹配,但它不会只返回一个值。您必须指示它使用或其变体来执行此操作,这些变体也会返回默认值(,) 为了避免异常,如果LINQ查

请看下面的代码:FormatException未被用户代码处理

代码:

 satis.KDV = Decimal.Parse((from o in genSatisctx.Urun where o.ID == UrunID select o.Kdv).ToString());

如何重写linq查询?

您正在对查询而不是单个结果调用
ToString
。即使您可能只期望一个值与查询匹配,但它不会只返回一个值。您必须指示它使用或其变体来执行此操作,这些变体也会返回默认值(,)

为了避免异常,如果LINQ查询返回无法正确解析的内容,可以将其更改为使用,也可以将代码更改为使用默认值。我推荐前者或两者结合

请注意,在下面的示例中,我已将调用添加到。这确保了即使没有找到值,也只解析一个值,并且如果有多个结果,我们会得到一个异常(即,它强制我们在查询中得到零个或一个结果)


您正在对查询而不是单个结果调用
ToString
。即使您可能只期望一个值与查询匹配,但它不会只返回一个值。您必须指示它使用或其变体来执行此操作,这些变体也会返回默认值(,)

为了避免异常,如果LINQ查询返回无法正确解析的内容,可以将其更改为使用,也可以将代码更改为使用默认值。我推荐前者或两者结合

请注意,在下面的示例中,我已将调用添加到。这确保了即使没有找到值,也只解析一个值,并且如果有多个结果,我们会得到一个异常(即,它强制我们在查询中得到零个或一个结果)


您正在
IQueryable
上调用
ToString()
-您希望字符串是什么?它不太可能是任何可以解析为十进制数的东西

我的猜测是您想调用
First()
Single()
,但如果没有更多信息,我们真的无法确定。什么类型的
o.Kdv

我想你要么想要:

satis.KDV = (from o in genSatisctx.Urun 
             where o.ID == UrunID 
             select o.Kdv).First();


您正在
IQueryable
上调用
ToString()
-您希望字符串是什么?它不太可能是任何可以解析为十进制数的东西

我的猜测是您想调用
First()
Single()
,但如果没有更多信息,我们真的无法确定。什么类型的
o.Kdv

我想你要么想要:

satis.KDV = (from o in genSatisctx.Urun 
             where o.ID == UrunID 
             select o.Kdv).First();


当我使用调试模式时,我看到数据在鼠标上方更新,在该方法结束后(显示此消息[输入字符串格式不正确]

 /*   protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
           try
          {

            TextBox name = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditName");
            SqlDataSource2.UpdateParameters["Name"].DefaultValue = name.ToString();

            TextBox age = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditAge");
            SqlDataSource2.UpdateParameters["Age"].DefaultValue = age.ToString();

            TextBox birthday = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditBirthday");
            SqlDataSource2.UpdateParameters["Birthday"].DefaultValue = birthday.ToString();

            DropDownList country = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("DropEditCountry");
            SqlDataSource2.UpdateParameters["CountryID"].DefaultValue = country.SelectedValue;


            TextBox mobile = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditMobile");
            SqlDataSource2.UpdateParameters["Mobile_No"].DefaultValue = mobile.ToString();
            SqlDataSource2.Update();
        }
        catch (Exception j)
       {
       j.Message.ToString();
       }
    }

/* }

当我使用调试模式时,我看到数据在鼠标上方更新,在该方法结束后(显示此消息[输入字符串格式不正确]

 /*   protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
           try
          {

            TextBox name = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditName");
            SqlDataSource2.UpdateParameters["Name"].DefaultValue = name.ToString();

            TextBox age = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditAge");
            SqlDataSource2.UpdateParameters["Age"].DefaultValue = age.ToString();

            TextBox birthday = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditBirthday");
            SqlDataSource2.UpdateParameters["Birthday"].DefaultValue = birthday.ToString();

            DropDownList country = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("DropEditCountry");
            SqlDataSource2.UpdateParameters["CountryID"].DefaultValue = country.SelectedValue;


            TextBox mobile = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtEditMobile");
            SqlDataSource2.UpdateParameters["Mobile_No"].DefaultValue = mobile.ToString();
            SqlDataSource2.Update();
        }
        catch (Exception j)
       {
       j.Message.ToString();
       }
    }

/* }

如果没有找到值,这将在ToString调用上抛出NullPointerException。@Jon:这不取决于
o.Kdv
是什么吗?如果是十进制或其他数字,不是默认值就是0吗?如果没有找到值,这将在ToString调用上抛出NullPointerException。@Jon:这不取决于
o.Kdv
是什么吗?如果我是十进制或其他数字,不是默认值就是0吗?你需要修改你的格式,否则你将被否决,你将得不到任何答案。你需要修改你的格式,否则你将被否决,你将得不到任何答案。