gpt4 book ai didi

C# Datareader 到 DTO?

转载 作者:行者123 更新时间:2023-11-30 20:58:59 25 4
gpt4 key购买 nike

数据

Name | Value |  Date |

cat1 | 3 | date1 |
cat1 | 5 | date2 |
cat1 | 2 | date5 |
cat2 | 6 | date8 |
cat2 | 7 | date1 |
cat2 | 2 | date6 |

数据传输

public class MeterReadingsChartData
{
public string name { get; set; }
public List<DateTime> dates { get; set; }
public List<double> values { get; set; }
}

转换

 // first, I fetching datas from db to dataTable
// second, I convert to datatable to another object list
// for example IEnumerable<Readings> readings
// third, like following; one more conversation too
var chartSeries = readings.GroupBy(x => new { x.Name })
.Select(g => new
{
name = g.Key.Name ,
values = g.Select(x => x.Value).ToArray(),
dates = g.Select(x => x.Date).ToArray()
}).ToArray();

这三个对话之后,我的数据是这样的:

cat1: { values: {3 ,5, 2}, dates: {date1, date2, data5}
cat2: { values: {6 ,7, 2}, dates: {date8, date1, data6}

我可以直接从数据库数据对话到 DTO 吗?例如,我想要像下面这样的东西。 (可能有另外一个db的数据访问)

IEnumerable<MeterReadingsChartData> MeterReadingsChartData;
while (reader.Read())
{
// fill chart data DTO
}

这可能吗?如何实现?我希望,我可以解释...

最佳答案

鉴于您的 datesvalues属性是可变列表,您可以一次读取一行(未分组),然后键入一个按名称键入的字典,并在您进行时添加日期和值:

var readings = new Dictionary<string, MeterReadingsChartData>();
while (reader.Read())
{
string name = reader.GetString(0);
DateTime date = reader.GetDateTime(1);
double value = reader.GetDouble(2);

MeterReadingsChartData group;
if (!readings.TryGetValue(name, out group))
{
group = new MeterReadingsChartData {
Name = name,
Values = new List<double>(),
Dates = new List<DateTime>()
};
readings[name] = group;
}
group.Values.Add(value);
group.Dates.Add(date);
}

一些注意事项:

  • 我已将您的属性名称 PascalCased 以遵循 .NET 命名约定
  • 在您的 LINQ 代码中,您使用了 ToArray ,如果你的属性真的是列表,它实际上不会编译......如果你的属性实际上是数组,上面的方法将不起作用
  • 与其使用两个单独的列表,不如使用一个List<Tuple<DateTime, double>>。甚至创建一个单独的 Reading仅包含日期和值的类。
  • 您可以为 DTO 提供一个接受名称的构造函数,在构造函数中初始化列表,将列表属性设置为只读,并创建一个 AddReading(DateTime, double) 对象。使调用代码更简洁的方法。

关于C# Datareader 到 DTO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15700075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com