none
Замена запятой на точку в типе Double RRS feed

  • Вопрос

  • WPF C# база mdf

    Есть столбцы в которых записи типа NVARCHAR (50) в них например 1,5   -2,5 и т.д.

    Convert.ToDouble такого поля ругается, это из-за запятой. Вручную заменил запятую на точку и всё нормально сконвертировалось.

    Можно ли средствами Linq такой вопрос решить?

    Сначала данные вытащить из базы в коллекцию, потом в коллекции заменить запятую на точку, потом обратно записать данные из коллекции в базу?

    Или можно одним запросом как то поменять запятые на точку?

    В таблице данные только числа. Строк типа "Иван купил собаку, а Сергей ..." такого нет.

    Спасибо



    • Изменено DevingAs 23 октября 2015 г. 3:57
    23 октября 2015 г. 3:56

Ответы

  • Вы спрашиваете про решение такого типа?
    UPDATE [Таблица] SET [Поле]=REPLACE([Поле],',','.');

    • Помечено в качестве ответа DevingAs 23 октября 2015 г. 9:55
    23 октября 2015 г. 6:15
  • var data = (from c in db.klsp
                                select new { c.t5I }).ToList();
    
                    for (int i = 1; i < data.Count + 1; i++)
                    {
                        var nameResurs = db.klsp.FirstOrDefault(a => a.idkl == i);
    
                        nameResurs.t5I = nameResurs.t5I.Replace(',', '.');
                          
                        db.SaveChanges();


    • Помечено в качестве ответа DevingAs 23 октября 2015 г. 9:55
    23 октября 2015 г. 9:55

Все ответы

  • Наверное можно но совершенно не нужно.

    Лучше всего поменять тип данных в базе. 

    Если же это по каким то причинам невозможно то преобразования типов следует использовать Double.Parse(). Чтоб запятые воспринимались в качестве десятичного знака следует использовать NumberFormat на CultureInfo в которой десятичный знак запятая (например локаль России).

    Как это сделать показано в примере:

    https://msdn.microsoft.com/en-us/library/t9ebt447(v=vs.110).aspx


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа DevingAs 23 октября 2015 г. 6:07
    • Снята пометка об ответе DevingAs 23 октября 2015 г. 9:54
    23 октября 2015 г. 6:06
    Модератор
  • Вы спрашиваете про решение такого типа?
    UPDATE [Таблица] SET [Поле]=REPLACE([Поле],',','.');

    • Помечено в качестве ответа DevingAs 23 октября 2015 г. 9:55
    23 октября 2015 г. 6:15
  • Примерно да. Только средствами LinqTo
    23 октября 2015 г. 6:20
  • var data = (from c in db.klsp
                                select new { c.t5I }).ToList();
    
                    for (int i = 1; i < data.Count + 1; i++)
                    {
                        var nameResurs = db.klsp.FirstOrDefault(a => a.idkl == i);
    
                        nameResurs.t5I = nameResurs.t5I.Replace(',', '.');
                          
                        db.SaveChanges();


    • Помечено в качестве ответа DevingAs 23 октября 2015 г. 9:55
    23 октября 2015 г. 9:55