Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用lambda表达式选择项目_C#_Lambda - Fatal编程技术网

C# 如何使用lambda表达式选择项目

C# 如何使用lambda表达式选择项目,c#,lambda,C#,Lambda,我正在从数据存储中选择数据 我能够使用下面的查询获取第一个数组[0]{IHSWCFService.servicerence1.Observation} var newData = data.Select(a => new IHSData { PriceSymbol = Convert.ToString(a.PriceId), PeriodData = Convert.ToDateTime(a.ObservationVector.Select(x => x.Period

我正在从数据存储中选择数据

我能够使用下面的查询获取第一个数组
[0]{IHSWCFService.servicerence1.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()),
});
但我还想选择下一个数组。如下图屏幕截图所示


你能帮帮我吗。谢谢

您可能希望
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();
后一种方法将为每个
ObservationVector
创建一个单独的
IHSData
实例,其中一些实例将共享父类的相同
PriceId

或者,第三种方法是创建一个新类,即“解析版本的
观测向量”
,即包含解析值的属性,类似于:

var newData = data.Select(a => new IHSData
{
    PriceSymbol = Convert.ToString(a.PriceId),
    Data = a.ObservationVector.Select(x => ConvertObservationVector(x)).ToList()
});

其中,
ConvertObservationVector
是一种将
ObservationVector
转换为已解析类的方法。

屏幕截图无法通过谷歌搜索或编译。无论如何,截图并不能解释任何事情。假设
data
是一个IEnumerable,您已经编写了一个正确的Select语句。问题是什么?在PeriodData=Convert.ToDateTime(a.ObservationVector.Select(x=>x.Period).FirstOrDefault()中,我可以读取这些值。但我也想读取下一个值。[0]{IHSWCFService.ServiceReference1.Observation}[1]{IHSWCFService.ServiceReference1.Observation}我还想读取下一个值,因为每个
IHSData
只包含一个
PeriodData
,并且在
data
列表中,您想从数据库中获取每个
PeriodData
,这样将有多个
IHSData
对象具有相同的
PriceSymbol
但唯一的
PeriodData
,那么呢ode>Priceproperty?
Select
创建一个投影,该投影将应用于列表中的所有元素。如果添加
.ToList()
选择
方法之后,您将得到一个与输入列表长度相同的列表。感谢您的回复,我只是在检查。下面是错误信息,无法强制转换类型为“WhereSelectArrayInterator”的对象2[IHSWCFService.ServiceReference1.Observation,System.DateTime]“to type”System.IConvertible”和使用第二种方法很难在不发布实际类的代码的情况下判断。我不清楚为什么要使用
Convert.ToDateTime
Convert.ToUInt32
,因为工具提示似乎表明这些属性不是字符串,但已经具有正确的类型。这就是原因发布截图而不是实际代码是个坏主意。
var newData = data.Select(a => new IHSData
{
    PriceSymbol = Convert.ToString(a.PriceId),
    Data = a.ObservationVector.Select(x => ConvertObservationVector(x)).ToList()
});