c# - 如何将 linq 结果添加到带有键的列表中
问题描述
我有一个在 for 循环内的 linq,我使用 addRange() 将结果添加到列表中,但它会将整个内容添加到一个集合中,例如我的第一个循环结果有 16 个项目,第二个有 10 个项目。 ..我希望将它们添加到这样的列表中,然后我可以在列表中看到每个查询中添加了多少和哪些项目
public List<statisticsDaily> dailyStat(List<string> id,string dtFrom,string dtTo)
{
List<StatisticsDaily> rsltofquery = new List<StatisticsDaily>();
for (int i = 0; i < id.Count; i++)
{
var rslt = (from d in db.statDaily
join s in db.masterData on d.m_turbine_id equals s.m_turbine_id
where d.m_turbine_id == IPAddress.Parse(id[i]) && d.m_date >= frm && d.m_date <= to
select new StatisticsDaily
{
m_wind_speed = d.m_wind_speed,
Date = d.m_date.ToString("yyyy-MM-dd"),
name = s.turbine_name,
Production = d.m_energy_prod,
Availability = d.m_corrected_av
}
).AsEnumerable().OrderBy(s => s.Date).ToList();
rsltofquery.AddRange(rslt);
}
解决方案
您需要收集诸如List<List<StatisticsDaily>>
.
所以你的代码将是:
public List<List<statisticsDaily>> dailyStat(List<string> id,string dtFrom,string dtTo)
{
List<List<StatisticsDaily>> rsltofquery = new List<List<StatisticsDaily>>();
for (int i = 0; i < id.Count; i++)
{
var rslt = (from d in db.statDaily
join s in db.masterData on d.m_turbine_id equals s.m_turbine_id
where d.m_turbine_id == IPAddress.Parse(id[i]) && d.m_date >= frm && d.m_date <= to
select new StatisticsDaily
{
m_wind_speed = d.m_wind_speed,
Date = d.m_date.ToString("yyyy-MM-dd"),
name = s.turbine_name,
Production = d.m_energy_prod,
Availability = d.m_corrected_av
}).AsEnumerable().OrderBy(s => s.Date).ToList();
rsltofquery.Add(rslt);
}
}
如果你想使用所有元素,而不是部分,你可以使用SelectMany:
var x = dailyStat(id, dtFrom, dtTo);
foreach (var e in x.SelectMany(d => d)) ...
推荐阅读
- python - 从图像 Python 中读取网格
- javascript - JS Canvas 运动动画循环
- lua - 我有一个 gLua 错误:错误的参数 #1 到 'lower'(需要字符串,得到 nil)
- wpf - WPF MVVM 在视图模型之间传递数据但属性未更新
- flutter - Flutter 动画变得非常滞后
- javascript - 如何隐藏没有值的行
- java - Android Studio 拒绝运行 main()
- mysql - SQL JOIN 作为单行,子值作为列,并且能够 ORDER BY 子关系值
- jquery - HTML按钮元素没有输出任何东西
- javascript - 使用 Javascript 缩短重复/多个属性