C# Linq用于填充类的值

C# Linq用于填充类的值,c#,.net,linq,.net-4.0,C#,.net,Linq,.net 4.0,我有一节课 public class Row : IExtensible { public Row(); [ProtoMember(1, IsRequired = true, Name = "key", DataFormat = DataFormat.Default)] public byte[] key { get; set; } [ProtoMember(2, Name = "values", DataFormat = DataFormat.Default

我有一节课

public class Row : IExtensible
{
    public Row();

    [ProtoMember(1, IsRequired = true, Name = "key", DataFormat = DataFormat.Default)]
    public byte[] key { get; set; }

    [ProtoMember(2, Name = "values", DataFormat = DataFormat.Default)]
    public List<Cell> values { get; }
}
我需要在LINQ中填充这些值,这是我一直在尝试的:

var result =
(
    from a in firstrow
    let valuesset = a.Split(',')
    from l in valuesset
    select new CellSet.Row
    {
        key = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()),
        //values = new List<Cell>() //Not possible since only get is there
    }
).ToList();
var结果=
(
从第一排的
让valuesset=a.Split(',')
从价值集合中的l开始
选择新建单元格集。行
{
key=Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()),
//values=new List()//不可能,因为只有get存在
}
).ToList();
如何向对象CellSet.Row添加值

我也试过这个

//Edit:
//Read the xml file row by row and process it

var result =
(
    from a in firstrow
    let valuesset = a.Split(',')
    from l in valuesset
    select new CellSet.Row
    {
        key = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()),
        //values = new List<Cell>() //Not possible since only get is there
    }.values.Add(value12)
).ToList();
//编辑:
//逐行读取xml文件并对其进行处理
var结果=
(
从第一排的
让valuesset=a.Split(',')
从价值集合中的l开始
选择新建单元格集。行
{
key=Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()),
//values=new List()//不可能,因为只有get存在
}.值。添加(值12)
).ToList();
获取值中的错误,如:

IEnumerable的后续from子句中不允许使用“string[]”类型的表达式


您可以这样做:

Func<byte[], IEnumerable<Cell>, Row> create =
    (k, cs) =>
    {
        CellSet.Row row = new CellSet.Row { key = k };
        row.values.AddRange(cs);
        return row;
    };

var result =
(
    from a in firstrow
    let valuesset = a.Split(',')
    from l in valuesset
    select create(
        Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()),
        new [] { value12 })
).ToList();
Func创建=
(k,cs)=>
{
行=新的CellSet.Row{key=k};
row.values.AddRange(cs);
返回行;
};
var结果=
(
从第一排的
让valuesset=a.Split(',')
从价值集合中的l开始
选择创建(
Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()),
新[]{value12})
).ToList();

现在,由于您的代码不清楚它应该如何工作,所以答案也不太清楚。但是这应该会给你一个基本的想法。

你从哪里得到column1和data1?如何从
valueset
中提取它们?还有一点需要澄清:当我使用select create(byte1[],new[]{new Cell{column=Encoding.UTF8.GetBytes(column1),data=Encoding.UTF8.GetBytes(l[0].ToString())时,我在运行时和执行后出现越界异常。无法访问select create(//此处)中的“l”值吗?@user1907849-确实不清楚您的类型是什么,但
l
似乎是
字符串,所以
l[0]
字符
。这是您所期望的吗?
Func<byte[], IEnumerable<Cell>, Row> create =
    (k, cs) =>
    {
        CellSet.Row row = new CellSet.Row { key = k };
        row.values.AddRange(cs);
        return row;
    };

var result =
(
    from a in firstrow
    let valuesset = a.Split(',')
    from l in valuesset
    select create(
        Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()),
        new [] { value12 })
).ToList();