C# 如何将数据表转换为列表?

C# 如何将数据表转换为列表?,c#,asp.net,C#,Asp.net,我有一个数据集,其中只有很少的行和列,在columns状态下会有很多匹配的行,我希望所有具有相同状态的行将其绑定到某个列表。如何实现它 我需要它,因为我在所有具有相同状态的行中都有相同的资本,所以我不希望循环每次都运行……相反,我希望绑定所有具有相同资本的行并使用这些数据 DataSet ds = new DataSet(); da.Fill(ds, "table1"); DataTable dt = new DataTable(); dt = ds.Tables[0]; 让我

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

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

  DataSet ds = new DataSet();
  da.Fill(ds, "table1");
  DataTable dt = new DataTable();
  dt = ds.Tables[0];
让我更清楚一点


我有一个列为state、capital、population的数据集…我想在其他方法中使用此数据,所以我使用循环,当state为泰米尔纳德邦时,所有行中的capital和population都是相同的..因此不必为数据反复循环,因此,我想将具有相同状态的数据绑定到某个对象并使用它。这是我的要求。

好的,您可以通过执行以下操作将行放入列表中:

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;
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序11
{
班级计划
{
静态void Main(字符串[]参数)
{
变量列表=新列表
{
新对象[]{“泰米尔纳德邦”,“首都”,2000000},
新对象[]{“其他”,“大写”,9490384},
新对象[]{“泰米尔纳德邦”,“首都”,2000000}
};
foreach(列表中的变量项)
{
Console.WriteLine(string.Format(“{0}{1}}{2}”,项[0],项[1],项[2]);
}
Console.WriteLine();
Console.WriteLine();
var distinctList=list.Distinct(新的MyArrayComparer());
foreach(distinctList中的变量项)
{
Console.WriteLine(string.Format(“{0}{1}}{2}”,项[0],项[1],项[2]);
}
}
类MyArrayComparer:EqualityComparer
{
公共覆盖布尔等于(对象[]x,对象[]y)
{
如果(x.Length!=y.Length){返回false;}
对于(int i=0;i
好的,您可以通过执行以下操作将行放入列表中:

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;
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序11
{
班级计划
{
静态void Main(字符串[]参数)
{
变量列表=新列表
{
新对象[]{“泰米尔纳德邦”,“首都”,2000000},
新对象[]{“其他”,“大写”,9490384},
新对象[]{“泰米尔纳德邦”,“首都”,2000000}
};
foreach(列表中的变量项)
{
Console.WriteLine(string.Format(“{0}{1}}{2}”,项[0],项[1],项[2]);
}
Console.WriteLine();
Console.WriteLine();
var distinctList=list.Distinct(新的MyArrayComparer());
foreach(distinctList中的变量项)
{
Console.WriteLine(string.Format(“{0}{1}}{2}”,项[0],项[1],项[2]);
}
}
类MyArrayComparer:EqualityComparer
{
公共覆盖布尔等于(对象[]x,对象[]y)
{
如果(x.Length!=y.Length){返回false;}
对于(int i=0;i
List mylist=new List();
对象对象对象;
foreach(数据行dr在dt.行中)
{
obj=新对象()
obj.PropertyA=dr[“columnA”];
obj.PropertyB=dr[“columnB”];
obj.PropertyB=dr[“columnB”];
mylist.Add(obj);
}
另外,你可能会看到一些语法错误,因为我正在使用记事本,我现在没有编译器

如果使用Linq,也可以使用这种方式:

List mylist=new List();
对象对象对象;
foreach(数据行dr在dt.行中)
{
obj=新对象()
obj.PropertyA=dr[“columnA”];
obj.PropertyB=dr[“columnB”];
obj