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

时间:2016-02-17 20:15:35

标签: c# linq

当我有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;

1 个答案:

答案 0 :(得分:1)

在不知道具体应用的情况下,您可以尝试这样的事情:

//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都是这样的,因为我发现lambda更容易阅读。请注意,DataTables接受参数列表作为输入;无需先构建DataRow。第一个Where子句检查您的eCode,然后选择将行添加到DataTable并将其返回给newRows,以备您仍需要它们时使用。如果您不需要它们,您可以使用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迭代。