没有ToList的定义

时间:2014-11-07 18:20:47

标签: c# linq list

我正在尝试使用Linq读取CSV(每行包含DailyValues对象的组件)并将所有对象放入List。没有ToList(),它会cannot implicitly convert IEnumerable to List,如果我将.ToList()放在那里就会显示decimal does contain a definition for ToList()。为了记录,我是using System.Linq。如何使用以下内容将CSV中的数据转换为对象列表?

        List<DailyValues> values = new List<DailyValues>();

        values = from line in File.ReadAllLines(filePath).Skip(1)
                 let columns = line.Split(',')
                 select new DailyValues
                 {
                     Date = DateTime.Parse(columns[0]),
                     Open = decimal.Parse(columns[1]),
                     High = decimal.Parse(columns[2]),
                     Low = decimal.Parse(columns[3]),
                     Close = decimal.Parse(columns[4]),
                     Volume = decimal.Parse(columns[5]),
                     AdjClose = decimal.Parse(columns[6])
                     .ToList()  // this guy is the problem
                 };

2 个答案:

答案 0 :(得分:4)

您需要在查询中调用ToList而不是十进制属性,还需要围绕查询括号:

 (from line in File.ReadAllLines(filePath).Skip(1)
             let columns = line.Split(',')
             select new DailyValues
             {
                 Date = DateTime.Parse(columns[0]),
                 Open = decimal.Parse(columns[1]),
                 High = decimal.Parse(columns[2]),
                 Low = decimal.Parse(columns[3]),
                 Close = decimal.Parse(columns[4]),
                 Volume = decimal.Parse(columns[5]),
                 AdjClose = decimal.Parse(columns[6])
             }).ToList();

答案 1 :(得分:1)

尝试

List<DailyValues> values = 
    (
         from line in File.ReadAllLines(filePath).Skip(1)
         let columns = line.Split(',')
         select new DailyValues
         {
             Date = DateTime.Parse(columns[0]),
             Open = decimal.Parse(columns[1]),
             High = decimal.Parse(columns[2]),
             Low = decimal.Parse(columns[3]),
             Close = decimal.Parse(columns[4]),
             Volume = decimal.Parse(columns[5]),
             AdjClose = decimal.Parse(columns[6])
         }
    ).ToList();
  1. 您需要从整个查询中创建一个列表
  2. 您不需要创建新的列表然后覆盖它