2015-04-24 3 views
-1

Я хотел бы преобразовать эту DataTableПреобразовать TimeSpan удвоится в DataTable, используя выражение Linq/лямбда

dt.Columns.Add(new DataColumn("timespan1", typeof(TimeSpan))); 
dt.Columns.Add(new DataColumn("timespan2", typeof(TimeSpan))); 

в этом

dt.Columns.Add(new DataColumn("timespan1", typeof(double))); 
dt.Columns.Add(new DataColumn("timespan2", typeof(double))); 

Я сумел сделать это таким образом.

Double d;   

foreach (DataRow row in dt.Rows) 
{ 
    dr = dtNew.NewRow(); 

    dr[0] = row.ItemArray[0]; 
    Double.TryParse(((TimeSpan)(row.ItemArray[1])).TotalMinutes.ToString(), out d); 

    dr[1] = d; 
    Double.TryParse(((TimeSpan)(row.ItemArray[2])).TotalMinutes.ToString(), out d); 

    dr[2] = d; 
    dtNew.Rows.InsertAt(dr, 0); 
} 

Есть ли способ использовать Linq или выражение лямбда? Я хотел бы привязать этот new <double> DataTable к сложной гистограмме. Ценю вашу помощь. Благодарю.

+4

Почему вы преобразования TimeSpan в строку, а затем разбор его? Почему бы просто не использовать строку 'dr [1] = ((TimeSpan) .ItemArray [1]). TotalMinutes;'? –

+0

Это действительно имеет смысл. Я использую TryParse как безопасное преобразование. – palec

ответ

0

То, что у вас есть прямо сейчас, является правильным, за исключением того, что вы должны использовать TotalMinutes напрямую, не преобразовывая его в строку, (например, Jon Skeet, упомянутый в комментарии).

LINQ предназначен для запроса данных, он не должен использоваться для изменения данных. Ваш текущий код с циклом foreach понятен и передает намерение.

Но если вы ищете синтаксис LINQ, то вы можете сделать:

var dummyQuery = dt.AsEnumerable() 
       .Select(dr => 
       dtNew.Rows.Add(dr.Field<TimeSpan>("timespan1").TotalMinutes, 
           dr.Field<TimeSpan>("timespan2").TotalMinutes)) 
        .ToList();//To Iterate 

Это заполнит новый DataTable, dtNew с TotalMinutes значениями из оба колонки.

Другой вариант заключается в ваш проект результат запроса в Select анонимного типа, а затем использовать отражение для создания DataTable как Fastest way to fill DataTable from LINQ query using DataContext

Смежные вопросы