我正在尝试使用下面的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()
会更便宜。
无论哪种方式,这都感觉不太可读。
答案 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});
}
此处kvp
是KeyValuePair<string, string>
。在我看来,这更清楚你想要对字典中的每个条目做一些事情。