0

我有一个数据集,其中的行和列很少,在列状态下会有很多匹配的行,我希望所有具有相同状态的行将其绑定到某个列表..如何实现它。

我需要它,因为我在具有相同状态的所有行中都有相同的资本,所以我不希望循环每次都运行......相反,我想绑定所有具有相同资本的行并使用那个数据。

  DataSet ds = new DataSet();
  da.Fill(ds, "table1");
  DataTable dt = new DataTable();
  dt = ds.Tables[0];

让我更清楚

我有一个包含状态、首都、人口列的数据集......我想在其他方法中使用这些数据,所以我使用循环,当状态是泰米尔纳德邦时,所有行中的首都和人口都将相同......所以它的不需要一次又一次地循环数据,所以我想将具有相同状态的数据绑定到某个东西并使用它..这是我的要求..

4

2 回答 2

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. 您可以在此处找到相关文档。

已编辑问题的更新

好的,根据您的需要,这是一个可以满足您需求的工作控制台应用程序。简而言之,您需要实现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;
            }
        }
    }
}
于 2012-10-15T11:31:04.167 回答
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);
    }

PS你可能会看到一些语法错误,因为我正在使用记事本,我目前没有编译器

如果您使用的是 Linq,您也可以使用这种方式:如何将 DataTable 转换为通用列表?

于 2012-10-15T11:40:25.360 回答