如何获取数据表或其他对象列表,其中包含一个列表 <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();
我有一个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();