【发布时间】:2011-09-30 20:40:08
【问题描述】:
我有一个包含多列的 DataTable。我想从 DataTable 的第一列中得到一个List<String>。我该怎么做?
【问题讨论】:
我有一个包含多列的 DataTable。我想从 DataTable 的第一列中得到一个List<String>。我该怎么做?
【问题讨论】:
试试这个:
static void Main(string[] args)
{
var dt = new DataTable
{
Columns = { { "Lastname",typeof(string) }, { "Firstname",typeof(string) } }
};
dt.Rows.Add("Lennon", "John");
dt.Rows.Add("McCartney", "Paul");
dt.Rows.Add("Harrison", "George");
dt.Rows.Add("Starr", "Ringo");
List<string> s = dt.AsEnumerable().Select(x => x[0].ToString()).ToList();
foreach(string e in s)
Console.WriteLine(e);
Console.ReadLine();
}
【讨论】:
x[0] 替换为x["Lastname"] 的人来说。姓氏是我们感兴趣的列的名称。
var list = dataTable.Rows.OfType<DataRow>()
.Select(dr => dr.Field<string>(columnName)).ToList();
[编辑:如果无法编译,请将System.Data.DataSetExtensions 的引用添加到您的项目中]
【讨论】:
DataTable.AsEnumerable() 无法编译,请将 System.Data.DataSetExtensions 的引用添加到您的项目中。
columnName怎么办?
给你。
DataTable defaultDataTable = defaultDataSet.Tables[0];
var list = (from x in defaultDataTable.AsEnumerable()
where x.Field<string>("column1") == something
select x.Field<string>("column2")).ToList();
如果你需要第一列
var list = (from x in defaultDataTable.AsEnumerable()
where x.Field<string>(1) == something
select x.Field<string>(1)).ToList();
【讨论】:
这是你需要的吗?
DataTable myDataTable = new DataTable();
List<int> myList = new List<int>();
foreach (DataRow row in myDataTable.Rows)
{
myList.Add((int)row[0]);
}
【讨论】:
List<String>
我就像下面一样,在您将列设置为 AsEnumarable 后,您可以排序、排序或按照您的需要。
_dataTable.AsEnumerable().Select(p => p.Field<string>("ColumnName")).ToList();
【讨论】:
我为您制作了一个示例,希望对您有所帮助...
static void Main(string[] args)
{
var cols = new string[] { "col1", "col2", "col3", "col4", "col5" };
DataTable table = new DataTable();
foreach (var col in cols)
table.Columns.Add(col);
table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
foreach (var col in cols)
{
var results = from p in table.AsEnumerable()
select p[col];
Console.WriteLine("*************************");
foreach (var result in results)
{
Console.WriteLine(result);
}
}
Console.ReadLine();
}
【讨论】:
1.非常简单的代码来迭代数据表并获取列表中的列。
2.code ==>>>
foreach (DataColumn dataColumn in dataTable.Columns)
{
var list = dataTable.Rows.OfType<DataRow>()
.Select(dataRow => dataRow.Field<string>
(dataColumn.ToString())).ToList();
}
【讨论】: