我有一个数据集,其中包含很少的行和列,在列状态中会有许多匹配的行,我希望所有具有相同状态的行将它绑定到某个列表。如何实现它。
我需要它,因为我在所有具有相同状态的行中具有相同的资本,所以我不希望循环每次都运行...而是我想要绑定所有相同的行资本并使用该数据。
DataSet ds = new DataSet();
da.Fill(ds, "table1");
DataTable dt = new DataTable();
dt = ds.Tables[0];
让我更清楚
我有一个列有状态,资本,人口的数据集...我想在其他方法中使用这些数据,所以我使用循环,当状态为tamilnadu时,所有行中的资本和总体将是相同的。 .so它不需要一次又一次地循环数据,所以相反,我想将具有相同状态的数据绑定到某些东西并使用它......这是我的要求..
答案 0 :(得分:2)
好吧,您可以通过执行以下操作将行放入列表中:
using System.Linq;
...
var rowsArray = new DataRow[dt.Rows.Count];
dt.Rows.CopyTo(rowsArray, 0);
var rowsList = rowsArray.ToList();
但就基于您指定的标准进行过滤而言,我不确定,因为此处没有足够的信息。
除此之外,您实际上只需使用以下内容过滤DefaultView
dt.DefaultView.RowFilter = "some filter here";
然后绑定到DefaultView
。您可以找到关于here的文档。
好的,基于你想要的,这是一个可以满足你需要的工作控制台应用程序。简而言之,您需要实施EqualityComparer
和 在上面的代码中添加一行 ,与您的比较器进行Distinct
调用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication11
{
class Program
{
static void Main(string[] args)
{
var list = new List<object[]>
{
new object[] {"tamilnadu","capital",2000000},
new object[] {"other","capital",9490384},
new object[] {"tamilnadu","capital",2000000}
};
foreach (var item in list)
{
Console.WriteLine(string.Format("{0} | {1} | {2}", item[0], item[1], item[2]));
}
Console.WriteLine();
Console.WriteLine();
var distinctList = list.Distinct(new MyArrayComparer());
foreach (var item in distinctList)
{
Console.WriteLine(string.Format("{0} | {1} | {2}", item[0], item[1], item[2]));
}
}
class MyArrayComparer : EqualityComparer<object[]>
{
public override bool Equals(object[] x, object[] y)
{
if (x.Length != y.Length) { return false; }
for (int i = 0; i < x.Length; i++)
{
if (!x[i].Equals(y[i]))
{
return false;
}
}
return true;
}
public override int GetHashCode(object[] obj)
{
return 0;
}
}
}
}
答案 1 :(得分:1)
List<YourObject> mylist = new List<YourObject>();
YourObject obj;
foreach (DataRow dr in dt.Rows)
{
obj = new YourObject()
obj.PropertyA = dr["columnA"];
obj.PropertyB = dr["columnB"];
obj.PropertyB = dr["columnB"];
mylist.Add(obj);
}
P.S。您可能会看到一些语法错误,因为我正在使用记事本,我目前没有编译器
如果您使用的是Linq:How do you convert a DataTable into a generic list?
,也可以使用这种方式