将数据表转换为IList c#

Tho*_*mas 3 c# linq lambda

我得到了一个将数据表转换为ilist的代码.这可能有用,但代码对我来说不是很清楚.这是代码

table.AsEnumerable()
.Select(r => table.Columns.ToDictionary(c => c.ColumnName, c => r[c]))
.ToList();
Run Code Online (Sandbox Code Playgroud)

什么是table.Columns.ToDictionary()......它的作用.c => c.ColumnName,c => r [c]是什么意思r [c]返回.我不是很清楚.

我得到了另一个片段......就在这里

var list = new List<DataRow>();
foreach (var row in table.Rows)
   list.Add(row);

return list;
Run Code Online (Sandbox Code Playgroud)

这段代码对我来说很清楚,但我想知道哪个代码具有2个不同代码段的良好性能.请讨论.谢谢

Jon*_*eet 5

ToDictionary调用将每个调用转换DataRowDictionary<string, object>可用于查找行中任何字段值的值.=>lambda表达式中使用的语法- 如果要对LINQ进行大量的工作,你应该真正了解lambda表达式.

您的第二个片段将更简单地写为:

var list = table.Rows.Cast<DataRow>().ToList();
Run Code Online (Sandbox Code Playgroud)

在效率方面 - 第一种形式在构建字典时从行中获取所有数据.如果您只需要查看某些字段,那么这可能会降低效率.另一方面,它可能更方便.这取决于你以后用它做什么.在内存方面,第二种形式意味着DataRow对象本身不能被垃圾收集,而第一种形式之后不需要行 - 但是它创建了所有实际数据的副本.在您的情况下,这是否相关将再次取决于您的其余代码.

我不打算开始关注性能 - 从使用最简单的代码编写的代码开始,然后检查它是否表现得足够好.