Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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# 需要帮助使用LINQ将一种列表转换为另一种列表吗_C#_Linq - Fatal编程技术网

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,…。})
请查看