2015-03-31 130 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)的搜索算法)