C# 将数据集中所有数据表中的列中的数据插入列表的最快方法

C# 将数据集中所有数据表中的列中的数据插入列表的最快方法,c#,C#,基本上,我需要从数据集中的每个表中获取电子邮件列(其中可能有0个表,也可能有100个表),然后将它们组合到一个大列表中,以便稍后处理 我正要编写2x嵌套循环来完成它,但是有没有更简单的方法来键入这个 我第一次尝试循环时效果不太好,因为DataTables没有定义GetEnumerator: foreach(DataTable item in emailTables.Tables) { foreach(var email in item) { // This doesn'

基本上,我需要从数据集中的每个表中获取电子邮件列(其中可能有0个表,也可能有100个表),然后将它们组合到一个大列表中,以便稍后处理

我正要编写2x嵌套循环来完成它,但是有没有更简单的方法来键入这个

我第一次尝试循环时效果不太好,因为DataTables没有定义GetEnumerator:

foreach(DataTable item in emailTables.Tables)
{
    foreach(var email in item)
    {
     // This doesn't work
    }
}

正如L.B.所说,这是基于意见的,但LINQ将是我的第一选择。可读性稍差,但总体上打字更少,嵌套肯定更少

var listEmail = (from DataTable table in emailTables.Tables 
                 from DataRow row in table.Rows 
                 select row["yourColumnNameHere"].ToString()).ToList();

如果任何表格没有(或可能没有)电子邮件列,则您必须进行更多验证。

在我的初始答案被接受后,我选择使用单独的答案来扩展评论中提出的问题

问题是:


我正在考虑将其作为一种扩展方法,是否可以扩展此代码以获得多个项目,如电子邮件、姓名和地址?也许是其他什么东西,而不是列表

答案是:

select
语句中创建匿名类型,并从列中为这些类型指定不同的值:

var selectedItems = from DataTable table in emailTables.Tables
            from DataRow row in table.Rows
            select
                new
                {
                    EMail = row["email"].ToString(),
                    Address = row["address"].ToString(),
                    Name = row["name"].ToString()
                };
然后在
selectedItems
中循环浏览结果,并对字段执行任何您想要的操作。不确定要将结果存储在哪种类型中,但这会给您一个非常好的主意

        foreach (var item in selectedItems)
        {
            //Do whatever you want by accessing the fields EMail, Address, and Name using dot notation like
            var myVar = item.EMail;
            var myVar2 = item.Address;
            //Etc... Not sure what the end result you need is going to be, but you should have a good starting point now.
        }

或者您可以返回
selectedItems
集合。它的类型是
IEnumerable

更简单的方法
?基于观点。使用当前的解决方案,您实际上不是在访问列,而是在访问表本身。您需要执行
foreach(item.Rows中的DataRow)
等操作,或者您可以尝试下面的LINQ解决方案;)我编辑它是为了反映您的
数据集
名称。请将其理解为“另一种方式”,停止抱怨。LINQ似乎是最短的解决方案,谢谢Evan!没问题=)快乐的编码!我正在考虑将其作为一种扩展方法,是否可以扩展此代码以获得多个项目,如电子邮件、姓名和地址?可能要转换为列表以外的数据结构?您肯定需要与
List
不同的数据结构(除非您要执行逗号分隔的
String.Split(','))
或其他什么。让我看一下,如果我找到了一个好的解决方案,我会进行编辑。@RealityDysfunction我已经回答了您下面的第二个问题。看一看。