C# 需要帮助使用LINQ将一种列表转换为另一种列表吗
我有以下行类的列表C# 需要帮助使用LINQ将一种列表转换为另一种列表吗,c#,linq,C#,Linq,我有以下行类的列表(list): public class Row { public List<Field> fields { get; } public Row() { fields = new List<Field>(); } public void AddField(Field field) { fields.Add(field); } } public class Fie
(list)
:
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;
}
}
其中“Id”是递增计数器,PubId
对应于Name:“PubId”,Value:“SomeValue”
而Date对应于Name:“Date”,Value:“SomeDate”
我知道这可以用LINQ来完成,但我就是不能把我的头绕在它身上
提前感谢。List rows=GetRows();
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.
}
int i=0;
列出文档=行。选择(r=>newdocument()
{
Id=(i++).ToString(),
PubId=r.fields.Where(f=>f.Name==“PubId”)。选择(f=>f.Value)。FirstOrDefault(),
Date=GetDate(r.fields.Where(f=>f.Name==“Date”)。选择(f=>f.Value)。FirstOrDefault()
}).ToList();
公共日期GetDate(字符串输入)
{
//在这里转换。
}
列出行=GetRows();
int i=0;
列出文档=行。选择(r=>newdocument()
{
Id=(i++).ToString(),
PubId=r.fields.Where(f=>f.Name==“PubId”)。选择(f=>f.Value)。FirstOrDefault(),
Date=GetDate(r.fields.Where(f=>f.Name==“Date”)。选择(f=>f.Value)。FirstOrDefault()
}).ToList();
公共日期GetDate(字符串输入)
{
//在这里转换。
}
如果我理解正确的话,您希望
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。第二,如果使用指定的<代码>名称使用“<代码>第一号/代码>将引发异常,您可以考虑使用<代码> FrestRealSuth,但这对于“日期”可能是有问题的。最后,如果“Date”字段的值不是有效的日期,则DateTime.Parse
将抛出,具体取决于您可能需要使用的格式DateTime.ParseExact
。如果我理解正确,您希望
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。第二,如果使用指定的<代码>名称使用“<代码>第一号/代码>将引发异常,您可以考虑使用<代码> FrestRealSuth,但这对于“日期”可能是有问题的。最后,如果“Date”字段的值不是有效的日期,则DateTime.Parse
将抛出,具体取决于您可能需要使用的格式DateTime.ParseExact
。var result=(sourceArray)。选择(e=>新文档{DocProp=e.SourceProp,…)
请查看var result=(sourceArray)。选择(e=>newdocument{DocProp=e.SourceProp,…。})
请查看