[英]How can I sort a datatable using an outside list (prefer linq)?
我有幾行未排序的數據表。 我的數據表列之一是唯一的Integer ID。
我在數據表之外有一個單獨的方法,該方法正在處理該表中的信息(以及其他一些數據),並向我返回表中ID的排序列表。
我想做的是在datagridview中表示我的數據表,並使用從我的方法返回給我的列表進行排序。 排序后的列表是一個List(Of Integer),其中包含表中的所有ID。
result = result
.Where(l => ids.Any(id => id == l.id))
.ToList()
.OrderBy(l => ids.IndexOf(l.id))
您可以在數據表上添加“排序”列:
myDataTable.Columns.Add("SortCol", typeof(Int32));
for (int i=0;i<MyDataTable.Rows.Count;i++)
myDataTable.Rows[i]["SortCol"]=mySortedList.IndexOf(myDataTable.Rows[i]["Id"] ;
然后,使用bindingSource將DataTable綁定到DataGridView:
BindingSource myBindingSource = new BindingSource() ;
myGridView.BindingSource = myBindingSource ;
myBindingSource.DataSource = myDataTable ;
最后,隱藏“ SortCol”並對datagridView進行排序:
myGridView.Columns["SortCol"].Visible = false ;
myBindingSource.Sort = "SortCol ASC" ;
您可以使用在Join
中保留第一個集合的順序的事實:
Dim ids = { 4, 2, 3, 1 }
Dim dt = new DataTable()
dt.Columns.Add("ID", GetType( integer))
dt.Rows.Add( { 1 })
dt.Rows.Add( { 2 })
dt.Rows.Add( { 3 })
dt.Rows.Add( { 4 })
Dim query = From id In ids
Join row in dt.AsEnumerable On id Equals row(0)
Select row
query
現在將作為返回數據的行4, 2, 3, 1
。
您可以使用CopyToDataTable
將結果轉換回Datatable。
這是我使用的:(請注意,keyList是表中已排序的ID的列表(整數))
Dim sortQuery = From id In keyList
Join row In myTable.AsEnumerable On id Equals row.Field(Of Integer)("ID")
Select row
Dim newtable = sortQuery.CopyToDataTable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.