如何转换为int然后在linq查询中进行比较c#

use*_*420 -1 c# linq

IEnumerable<classB> list = getItems();
//dt is datatable

list = list.Where(x => Convert.ToInt32( !dt.Columns["Id"]) == (x.Id));
Run Code Online (Sandbox Code Playgroud)

我想只保留列表中与datatable id列匹配的项目.其余的都被删除了.我做得不对.

数据表可以有:ID - 1,3,4,5,7该列表可以有:ID - 1,2,3,4,5,6,7,8,9,10

我希望输出列表具有:ID - 1,3,4,5,7

Ser*_*rvy 6

您的代码将无效,因为您将列的定义与整数值进行比较.这不是一个明智的比较.

您可以做的是将数据表中的所有值放入可以有效搜索的集合中,然后获取列表中同样位于该集合中的所有项:

var ids = new HashSet<int>(dt.AsEnumerable()
    .Select(row => row.Field<int>("Id"));
list = list.Where(x => ids.Contains(x.Id));
Run Code Online (Sandbox Code Playgroud)