在两个集合中搜索
本文关键字:集合 搜索 两个 | 更新日期: 2023-09-27 18:13:49
我有两个集合。BindingSource的集合和DataSet的集合。现在,我尝试在DataSet集合的表类型中找到BindingSource集合的相应数据类型。但我的方法略显优雅。如何用LINQ求解?
foreach (var bindindSource in view.DataContext)
{
var dataSource = bindindSource.DataSource;
string sourceName = ((Type)dataSource).Name;
foreach (var dataSet in model.DataSource)
{
var table = (from DataTable t in dataSet.Tables
where ((Type)t.GetType()).Name.Equals(sourceName)
select t).FirstOrDefault();
if (table != null)
{
bindindSource.DataSource = table;
break;
}
}
}
似乎您正在尝试将BindingSource
与具有相同Type
名称的第一个DataTable
相关联。最直接的方法是预先准备一个Dictionary
,它将用于查找的名称映射到表:
var tablesByName = (from set in model.DataSource
from table in set.Tables
select table) // get all tables of all sets
.ToDictionary(table => (table.GetType() as Type).Name)
(如果表从未改变,这可以是一个只计算一次的static
字段)
那么剩下的代码应该减少为:
foreach (var source in view.DataContext)
{
DataTable table;
var name = (source.DataSource as Type).Name;
if (tablesByName.TryGetValue(name, out table))
{
source.DataSource = table;
}
}
我省略了处理像有重复名称的表这样的事情。(这将使ToDictionary()
失败,所以你必须在调用之前摆脱重复项。)