2013-08-26 2 views
0

Пытается получить отсортированные данные из файла CSV. Этот код отлично работает, за исключением столбца «Сторона», который является строкой и одинаковый для одной группы. Я не могу понять, какой параметр должен быть для методов Single() First().Параметр LINQ First() или Single()

var stuff = from line in File.ReadLines(@"d:\tmp\4.csv").Skip(1) 
        let columns = line.Split(';') 
        select new 
        { 
         Time = columns[0], 
         Side = columns[2], 
         Qty = columns[3], 
         Symbol = columns[4], 
         Price = columns[5], 
        }; 

     var sorted = from line in stuff 
        group line by new { line.Time, line.Symbol } 
         into category 
         select new { 
          category.Key.Time, 
          category.Key.Symbol, 
          Qty = category.Sum(p => Int32.Parse(p.Qty)), 
          Price = category.Average(p => double.Parse(p.Price)), 
          Side = ?????? }; 
+2

добавить line.Side в вашей группе запросов, как line.Time, line.Symbol, line.Side, а затем прочитать его, как Side = Category.Key.Side – Ehsan

+0

@ Нет, спасибо! Но возможно ли получить Side аналогично Qty и Price? – Dork

ответ

1

Single сгенерирует исключение, если он находит более одной записи, я думаю, что это не то, что вы хотите

First выберите первую запись из списка, но оба Single и First будут бросаться " InvalidOperationException ', если коллекция пуста.

Так что я хотел бы использовать FirstOrDefault здесь

Side = category.Select(p => p.Side).FirstOrDefault() 
+0

Это вызывает Ошибка Невозможно неявно преобразовать тип 'string' в 'bool' – Dork

+0

Каковы значения в csv как 'Side'? – Damith

+0

Струны. «B» или «S». Но он даже не компилируется из-за Side = category.FirstOrDefault (p => p.Side) – Dork

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