簡體   English   中英

從數據表中獲取不同的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM