さて、次のようにして、行をリストに入れることができます。
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
つまり、 を実装し、上記のコードに 1 行追加する必要があり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;
}
}
}
}