C# 如何在Linq查询中创建新行?

C# 如何在Linq查询中创建新行?,c#,linq,C#,Linq,当我得到linq查询的过滤结果时,我试图创建一个新行。我希望语法如下所示,但我不知道该怎么做。我正在尝试创建一个新行,其中包含从旧行中选择的不同字段 dv = (from row in MV.Data.AsEnumerable() where !(row["eCode"].ToString().Contains("OP")) select DataRow(row["time"], row["value"], row["size"], ro

当我得到linq查询的过滤结果时,我试图创建一个新行。我希望语法如下所示,但我不知道该怎么做。我正在尝试创建一个新行,其中包含从旧行中选择的不同字段

dv = (from row in MV.Data.AsEnumerable()
        where !(row["eCode"].ToString().Contains("OP"))
        select DataRow(row["time"], row["value"], 
            row["size"], row["condition"], 
            row["eCode"]))
         .CopyToDataTable().DefaultView;

在不了解具体应用程序的情况下,您可以尝试以下操作:

//where dt is your DataTable...
var source = MV.Data;
var newRows = source.Where(d => d.eCode.ToString().Contains("OP"))
                    .Select(d => dt.Rows.Add(d.time, d.value, d.size, d.condition, d.eCode));
我写的大部分linq都是这样的,因为我发现lambdas更容易阅读。注意,DataTables接受参数列表作为输入;不需要先构造数据行。第一个Where子句检查您的eCode,并选择将该行添加到DataTable中,并将其返回给新行,以防您仍然需要它们。如果不需要它们,可以使用ForEach进行迭代,或者如果行数足够少,则执行以下操作:

//where dt is your DataTable...
var source = MV.Data;
source.Where(d => d.eCode.ToString().Contains("OP"))
      .ToList() //copies everything into memory
      .Foreach(d => dt.Rows.Add(d.time, d.value, d.size, d.condition, d.eCode));
这种方法只包含一个内联Foreach迭代。

可能重复的