执行LINQ表达式

时间:2012-02-07 20:12:24

标签: c# .net linq

我正在尝试使用下面的LINQ表达式来填充我的数据表,这很好但是感觉就像一个黑客。有更好的方法吗?

var Records = <Dictionary object with some data.>

DataTable objDataTable = null;
objDataTable.Columns.Add("Column1", typeof (string));
objDataTable.Columns.Add("Column2", typeof (string));

// Have to perform .Count() to execute the linq expression in order to 
// add datarows in datatable

Records.Keys.Select(rec => objDataTable.Rows.Add(new object[] {rec, Records[rec]})).Count();

正如您在上面所见,我必须在最后.Count()才能执行该语句。早些时候我正在做.ToArray(),但后来我认为.Count()会更便宜。

无论哪种方式,这都感觉不太可读。

3 个答案:

答案 0 :(得分:3)

是的 - 只需使用一个完全可读且适用的foreach循环:

foreach(var rec in Records.Keys)
{
    objDataTable.Rows.Add(new object[] {rec, Records[rec]});
}

仅仅因为你可以使用Linq并不意味着你应该总是被迫这样做 - 特别是如果你有代码有副作用。

答案 1 :(得分:1)

改为使用ForEach

Records.Keys.ForEach(rec => objDataTable.Rows.Add(new object[] {rec, Records[rec]}));

答案 2 :(得分:0)

看到你总是查找迭代的每个键的值,我只想枚举字典本身:

foreach(var kvp in Records)
{
    objDataTable.Rows.Add(new object[] {kvp.Key, kvp.Value});
}

此处kvpKeyValuePair<string, string>。在我看来,这更清楚你想要对字典中的每个条目做一些事情。