我有以下Row类的列表(List<Row>)
:
public class Row
{
public List<Field> fields { get; }
public Row()
{
fields = new List<Field>();
}
public void AddField(Field field)
{
fields.Add(field);
}
}
public class Field
{
public string Name { get; }
public string Value { get; }
public Field(string name, string value)
{
this.Name = name;
this.Value = value;
}
}
我想将其转换为以下格式的列表List<Document>
:
public class Document
{
public string Id { get; set; }
public string PubId { get; set; }
public Date Date { get; set; }
}
其中“Id”是递增计数器,PubId
对应Name: "PubId", Value: "SomeValue"
,而日期对应Name: "Date", Value: "SomeDate"
。
我知道这可以使用LINQ完成,但我无法绕过它!
提前致谢。
答案 0 :(得分:3)
如果我理解正确,你想要像
这样的东西var docList = rowList.Select((r,i) => new Document
{
Id = (i + 1).ToString(),
PubId = r.fields.First(f => f.Name == "PubId").Value,
Date = DateTime.Parse(r.fields.First(f => f.Name == "Date").Value)
}).ToList();
首先关闭Select
重载,我使用包含索引,我假设您希望第一个Id
为1而不是0.其次使用First
是如果找不到具有指定Field
的{{1}},则会抛出异常(您可能会考虑使用Name
代替,但这对于&#34;日期&#34可能会有问题)。最后,如果&#34;日期&#34; FirstOrDefault
Value
不是Field
将投掷的有效日期,具体取决于您可能需要使用DateTime.Parse
的格式。
答案 1 :(得分:1)
List<Row> rows = GetRows();
int i =0;
List<Document> docs = rows.Select(r => new Document()
{
Id = (i++).ToString(),
PubId = r.fields.Where(f => f.Name == "PubId").Select(f => f.Value).FirstOrDefault(),
Date = GetDate(r.fields.Where(f => f.Name == "Date").Select(f => f.Value).FirstOrDefault())
}).ToList();
public Date GetDate(string input)
{
// Convert Here.
}