如何转换类型'System.Collections.Generic.IEnumerable 'to'System.Collections.Generic.IEnumerable <>'。

问题描述 投票:1回答:2

我需要将以下linq直接转换为List,如果我将其转换为列表我仍然得到我在该主题上解释的错误,它说我需要将其转换为列表,但仍然有错误,我怎么能转换它到字符串列表?没有像foreach那样使用额外的转换,...

List<string>  eventResult= (from c in DB.Events
                        where (c.m_turbine_id == turbineid.turbineID) && (c.m_time_stamp >= frmDate && c.m_time_stamp <= toDate)

                 select new EventLogPartialViewModel
                 {
                     Timestamp = c.m_time_stamp,
                     Description = c.m_event_log_description,
                     WindSpeed = c.m_wind_speed,
                     RPM = c.m_rpm,
                     Power = c.m_power
                 }).ToList().Select(x => new
                           {
                               Timestamp = x.Timestamp.ToString("dd/MM/yyyy H:mm:ss"),
                               Description = x.Description,
                               WindSpeed = x.WindSpeed,
                               RPM = x.RPM,
                               Power = x.Power
                           }).ToList().OrderByDescending(m => m.Timestamp);

上面的linq的第一部分,我得到数据并转换为列表,因为我需要更改我的时间戳格式,任何帮助将不胜感激。

c# linq
2个回答
1
投票

因为您需要使用标头创建逗号分隔值列表,

//Add headers as first item
List<string>  eventResult = new List<string>(){"Timestamp,Description,WindSpeed,RPM,Power"};

//Add records
eventResult.AddRange(from c in DB.Events
                        where (c.m_turbine_id == turbineid.turbineID) && (c.m_time_stamp >= frmDate && c.m_time_stamp <= toDate)

                 select new EventLogPartialViewModel
                 {
                     Timestamp = c.m_time_stamp,
                     Description = c.m_event_log_description,
                     WindSpeed = c.m_wind_speed,
                     RPM = c.m_rpm,
                     Power = c.m_power
                 }).ToList().Select(x => 
                      x.Timestamp.ToString("dd/MM/yyyy H:mm:ss")) + "," +
                      x.Description + "," +
                      x.WindSpeed + "," +
                      x.RPM + "," +
                      x.Power

                 .ToList());

1
投票

在Linq查询中,您选择的是匿名复杂类型,因此您无法为其分配List<string>。你应该使用var来保持匿名类型的引用。

var eventResult= (from c in DB.Events
                        where (c.m_turbine_id == turbineid.turbineID) && (c.m_time_stamp >= frmDate && c.m_time_stamp <= toDate)

                 select new EventLogPartialViewModel
                 {
                     Timestamp = c.m_time_stamp,
                     Description = c.m_event_log_description,
                     WindSpeed = c.m_wind_speed,
                     RPM = c.m_rpm,
                     Power = c.m_power
                 }).ToList().Select(x => new
                           {
                               Timestamp = x.Timestamp.ToString("dd/MM/yyyy H:mm:ss"),
                               Description = x.Description,
                               WindSpeed = x.WindSpeed,
                               RPM = x.RPM,
                               Power = x.Power
                           }).OrderByDescending(m => m.Timestamp).ToList();

此外,理想的方法是创建一个复杂类型的类来处理引用而不是使用匿名类型。

© www.soinside.com 2019 - 2024. All rights reserved.