使用C#Linq Lambda将两个对象中的字段组合为一个,最好没有匿名对象

VBA*_*ole 5 c# linq lambda

我有这样的课程设置:

 public class Summary
{
    public Geometry geometry { get; set; }
    public SummaryAttributes attributes { get; set; }
}
public class SummaryAttributes
{
    public int SERIAL_NO { get; set; }
    public string District { get; set; }
 }
public class Geometry
{
    public List<List<List<double>>> paths { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我为该对象获取一个json记录字符串,并将其放入其中,如下所示:

List<Summary> oFeatures = reportObject.layers[0].features.ToObject<List<Summary>>();
Run Code Online (Sandbox Code Playgroud)

我的最终目标是创建一个csv文件,因此我需要一个平整的记录列表才能发送给我拥有的csv编写器。我可以做这个:

 List<SummaryAttributes> oAtts = oFeatures.Select(x => x.attributes).ToList();
Run Code Online (Sandbox Code Playgroud)

我得到了一个不错的属性列表,并将其发送到csv。十分简单。

我想要的还是从Geometry对象中提取一个字段,并将其包含在我的最终List中以转到csv。所以最终名单要到CSV作家将包含对象的所有从SummaryAttributes字段几何对象上的第一个和最后双重价值从路径字段(路径[0] [0] [首页]和路径[0] [0] [最后]

很难解释。我想将两个额外的属性嫁接到原始的SummaryAttributes对象上。如果需要的话,可以用两个额外的字段创建一个新的SummaryAttributesXY类。但是,我试图避免创建一个新的匿名对象,并且必须对SummaryAttributes类中的每个字段进行定界,因为该示例中列出的内容比我要列举的更多。

有什么建议么?

Ser*_*kiy 4

您可以选择具有必填字段的新匿名对象,但您应该完全确定paths每一级列表中至少有一个项目:

var query = oFeatures.Select(s => new {
  s.attributes.SERIAL_NO,
  s.attributes.District,
  First = s.geometry.paths[0][0].First(), // or [0][0][0]
  Last = s.geometry.paths[0][0].Last()   
}).ToList()
Run Code Online (Sandbox Code Playgroud)