2015-03-31 169 views
-2

我有一個DataTable約30列,它可以非常大,一個被稱爲id。c#比較兩個列表/表

在其他列表中,我有4列。我正在考慮把它放在DataTable,但我不確定什麼是最好的。

name, id2, month, week 

我想知道在哪裏id == id2month在那個id2什麼。

idid2都是strings不是數字。

任何人都有一個好主意,如何做到這一點最好/最快的方式?

+5

使用'Linq'在'id'列上加入這兩個表,並在你試過的任何地方得到'month' – 2015-03-31 09:03:42

+2

Post。 – 2015-03-31 09:04:22

+0

_「在其他列表中,我有4列」_什麼樣的列表,什麼樣的班級,你可以展示它,以及你已經嘗試過什麼? – 2015-03-31 09:11:35

回答

1

你可以使用LINQ加入兩個集合:

var query = from row in dataTable.AsEnumerable() 
      join obj in list 
      on row.Field<string>("id") equals obj.id2 
      select obj.month; 

Enumerable.Joinan efficient way to link,因爲它使用引擎蓋下的一套。

現在,您可以執行此查詢,例如使用foreach循環或使用ToList/ToArray創建集合。

+0

如果我在DataTable中還有第二個列表,這也可能嗎? – Akjell 2015-03-31 09:34:28

+0

@Akjell:當然你可以把你列表中的所有對象添加到一個'DataTable'中。那麼你也可以加入這兩個表,如果這是你想要的。但你並不需要它。一個'DataTable'是弱類型的,而'List '是強類型的,這是更好的,因爲你不需要總是將所有東西都轉換爲正確的類型。 – 2015-03-31 09:35:57

1

解決方案,而不LINQ:

環路穿過較小列表(或者在列表與idid2列表)

對於每個列表項,搜索如果在其他列表中存在的id。

正如你看到的,有一個快速的搜索是很重要的(無論是部分索引或O(log n)的搜索算法)