Ошибка: FormatException не обрабатывается пользовательским кодом в Linq, как решить? - PullRequest
0 голосов
/ 07 апреля 2010

альтернативный текст 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?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2010

Вы звоните ToString по запросу, а не по одному результату.Даже если вы ожидаете, что только одно значение будет соответствовать вашему запросу, оно не будет возвращать только одно значение.Вы должны указать это, используя Single, First, Last или их варианты, которые также возвращают значение по умолчанию (SingleOrDefault, FirstOrDefault, LastOrDefault).

Чтобы избежать исключения, вы можете изменить его на использованиеDecimal.TryParse или вы можете изменить свой код на значение по умолчанию, если запрос LINQ возвращает что-то, что не будет проанализировано должным образом.Я бы порекомендовал первый или их комбинацию.

Обратите внимание, что в следующем примере я добавил вызов к SingleOrDefault .Это гарантирует, что анализируется только одно значение, даже если значение не найдено, и что при наличии нескольких результатов мы получаем исключение (т. Е. Оно гарантирует, что мы получаем ровно ноль или один результат для запроса).*

1 голос
/ 07 апреля 2010

Вы звоните 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?
}
0 голосов
/ 02 июля 2012

Когда я использую режим отладки, я вижу, что данные обновляются при наведении мыши, после завершения этого метода (показывается это сообщение [строка ввода была в неправильном формате]

 /*   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();
       }
    }

/* }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...