[英]Get distinct values from a datatable
我有一個帶有值的DataTable
:
ID NameID Name
1 1 qwe
2 2 ert
3 2 ert
4 3 dffg
5 3 dffg
我想要一個包含這樣的不同行的DataTable
:
ID NameID Name
1 1 qwe
2 2 ert
4 3 dffg
使用LINQ或其他方法如何實現?
var rows = tbl.AsEnumerable().Select(row => row).ToList();
tbl = new DataTable();
tbl.Columns.Add("ID", typeof(Int32));
tbl.Columns.Add("NameID", typeof(Int32));
tbl.Columns.Add("Name", typeof(String));
rows.GroupBy(r => r.Field<int>("NameID"))
.Select(rr => rows.First(rw => rw.Field<Int32>("NameID") == rr.Key))
.ToList()
.ForEach(rname => tbl.Rows.Add(new object []
{
rname.Field<Int32>("ID"),
rname.Field<Int32>("NameID"),
rname.Field<String>("Name"),
}));
測試數據設置:
DataTable tbl = new DataTable();
tbl.Columns.Add("ID", typeof (Int32));
tbl.Columns.Add("NameID", typeof (Int32));
tbl.Columns.Add("Name", typeof (String));
tbl.Rows.Add(new object[] { 1, 1, "qwe" });
tbl.Rows.Add(new object[] { 2, 2, "ert" });
tbl.Rows.Add(new object[] { 3, 2, "ert" });
tbl.Rows.Add(new object[] { 4, 3, "dffg" });
tbl.Rows.Add(new object[] { 5, 3, "dffg" });
將數據表分配給數據視圖,並通過數據視圖對象使用RowFilter,如下所示。
Dim DTb As New DataTable()
DataView dView= new DataView(DTb);
dView.RowFilter = strCondition.ToString //strCondition contains the condition to filter
strCondition將包含要過濾的條件,並在過濾后將數據視圖重新分配給數據表,如下所示
DTb = dView.ToTable()
嘗試,
var result = from ele in dt.AsEnumerable()
group ele by ele["NameID"] into g
select g.FirstOrDefault();
foreach (var t in result)
Console.WriteLine(t[0] + " " + t[1] + " " + t[2]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.