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