当我有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;
答案 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迭代。