如何获取数据表或其他对象列表,其中包含一个列表 <object> 和一个数据视图的交集

How to get a datatable or other object a list with the intersection of one List<object> and one dataview

我有一个DataTable

Datatable dt;

那里有 10 列,包括行的 ID。

在视图状态中,我有一个通用列表,如:

List<MyObject>;

Myobject 有一些字段包含相同的 ID。

数据表包含所有项目,列表包含这些项目的简化列表。 但是我的 gridview 需要绑定到数据表,而不是 List

问题是我怎样才能进入一个包含列表中所有项目的新数据表(与第一个数据表具有相同的列)

您可以使用 Linq:

var rowsInList  = from row in dt.AsEnumerable()
                  join obj in objectList
                  on row.Field<int>("ID") equals obj.ID
                  select row;
DataTable filtered = rowsInList.CopyToDataTable();

Enumerable.Join 是高效的,因为它使用的是集合。由于 LINQ 的延迟执行 rowsInList 只是一个 "no-op" 查询,它在 CopyToDataTable.

处执行

另一种效率较低的方法是使用 Where + Any(此处使用方法语法):

DataTable filtered = dt.AsEnumerable()
    .Where(row => objectList.Any(o => row.Field<int>("ID") == o.ID))
    .CopyToDataTable();