alt text http://i43.tinypic.com/5l8op0.jpg
请看下面这些代码告诉我:FormatException未被用户代码
处理代码:
satis.KDV = Decimal.Parse((from o in genSatisctx.Urun where o.ID == UrunID select o.Kdv).ToString());
如何重写linq查询?
答案 0 :(得分:2)
您在查询上调用ToString
而不是单个结果。即使您只希望一个值与您的查询匹配,它也不会只返回一个值。您必须使用Single
,First
,Last
或其中的变体来指示它执行此操作,这些变体也会返回默认值(SingleOrDefault
,FirstOrDefault
, LastOrDefault
)。
为了避免异常,您可以将其更改为使用Decimal.TryParse
,或者如果LINQ查询返回无法正确解析的内容,您可以将代码更改为使用默认值。我推荐前者或组合。
请注意,在以下示例中,我已将调用添加到SingleOrDefault。这确保只解析一个值,即使没有找到值,并且如果有多个结果,我们会得到一个异常(即它强制我们得到的结果恰好为零或一个)。
decimal parsedValue;
if (Decimal.TryParse(
genSatisctx
.Urun
.Where(o => o.ID == UrunID)
.Select(o=>o.Kdv)
.SingleOrDefault()
.ToString(), out parsedValue))
{
satis.KDV = parsedValue;
}
答案 1 :(得分:1)
您在ToString()
上呼叫IQueryable<T>
- 您对字符串的期望是什么?它不太可能是任何可以解析为十进制数的东西!
我的猜测是你要拨打First()
或Single()
,但如果没有更多信息我们就无法说出来。什么是o.Kdv
的类型?
我怀疑你要么:
satis.KDV = (from o in genSatisctx.Urun
where o.ID == UrunID
select o.Kdv).First();
或
string kdvString = (from o in genSatisctx.Urun
where o.ID == UrunID
select o.Kdv).First();
decimal kdv;
if (decimal.TryParse(kdvString, out kdv))
{
satis.KDV = kdv;
}
else
{
// What do you want to do if it's not valid?
}
答案 2 :(得分:0)
当我使用调试模式时,我看到数据在超过鼠标时更新,在此方法结束后(它显示此消息[输入字符串的格式不正确]
/* 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();
}
}
/* }