我从数据存储
我可以使用以下查询
获取第一个数组[0] {IHSWCFService.ServiceReference1.Observation}
var newData = data.Select(a => new IHSData
{
PriceSymbol = Convert.ToString(a.PriceId),
PeriodData = Convert.ToDateTime(a.ObservationVector.Select(x => x.Period).FirstOrDefault()),
StatusID = Convert.ToInt32(a.ObservationVector.Select(x => x.StatusId).ToList()),
Price = Convert.ToDouble(a.ObservationVector.Select(x => x.price).FirstOrDefault()),
});
但我也想选择下一个数组。如下面的屏幕截图所示
[0]{IHSWCFService.ServiceReference1.Observation}
[1]{IHSWCFService.ServiceReference1.Observation}
[2]{IHSWCFService.ServiceReference1.Observation}
你能帮我吗?谢谢
答案 0 :(得分:1)
您可能希望IHSData
中的所有属性都是列表:
var newData = data.Select(a => new IHSData
{
PriceSymbol = Convert.ToString(a.PriceId),
PeriodData = a.ObservationVector.Select(x => Convert.ToDateTime(x.Period)).ToList(),
StatusID = a.ObservationVector.Select(x => Convert.ToInt32(x.StatusId)).ToList(),
Price = a.ObservationVector.Select(x => Convert.ToDouble(x.price)).ToList(),
});
这不是一个好主意,因为你必须单独索引它们。所以另一种选择是使用SelectMany
:
var newData = data
.SelectMany(a => a.ObservationVector.Select(v =>
new IHSData
{
PriceSymbol = Convert.ToString(a.PriceId), // parent PriceId
PeriodData = Convert.ToDateTime(v.Period),
StatusID = Convert.ToInt32(v.StatusId),
Price = Convert.ToDouble(v.price),
}))
.ToList();
后一种方法将为每个IHSData
创建一个单独的ObservationVector
实例,其中一些将共享父类的PriceId
。
或者,第三种方法是创建一个新类,它将是ObservationVector
"的解析版本,即包含已解析值的属性,如:
var newData = data.Select(a => new IHSData
{
PriceSymbol = Convert.ToString(a.PriceId),
Data = a.ObservationVector.Select(x => ConvertObservationVector(x)).ToList()
});
其中ConvertObservationVector
是一种从ObservationVector
转换为已解析类的方法。