我如何使用LINQ找到类似的列名?
题
嗨,我努力学习LINQ的,所以我不知道这是否可以做到的。
我工作的进口项目 所以决定采用数据集数据导入。
我在这一点上的挑战:有2个数据表有不同的模式,其中一个包含我的目标模式,而另一个我的源架构。
我需要做的是进行一些列的匹配,我可以找出是的“有点类似” 的到我的目的地我的列源列。我找了这个地步,如果目标列名的任何部分包含在源,这是一个可能的匹配的东西我不知道有什么方法来确定相似性。
例如 源[名字,姓氏,地址] - >目的地[FNAME,L-NAME,ADDR1
那么,LINQ这个职位的人选吗?或正则表达式?我开始与这
有一个源数据表DT
var Lcols = from c in dt.Columns.Cast<System.Data.DataColumn>()
select c.ColumnName;
我不知道在哪里可以从这里...
去谢谢!
解决方案
LINQ的可能的是这里的候选人,但我认为你需要定义(如果你还没有这样做的话)是列怎么能是类似的东西。什么是分界点?一旦你有在其下可以一列映射到另一个的条件,则可以应用这些条件,以两组(来自源的列是第一组,而第二个是来自目的地的列)来的笛卡尔积获得潜在匹配的列表。
假设你已经在源和目标列,像这样:
IEnumerable<DataColumn> sourceColumns =
sourceDt.Columns.Cast<System.Data.DataColumn>();
IEnumerable<DataColumn> destColumns =
destDt.Columns.Cast<System.Data.DataColumn>();
和其在目标映射列的名称在源列名的IDictionary<string, string>
,你可以这样做:
var map =
from s in sourceColumns
from d in destColumns
where
// colMap is the IDictionary<string, string>
// The map has to contain the key.
colMap.ContainsKey(s.ColumnName) &&
// The destination column has to match the column map.
// The OrdinalIgnoreCase option means to ignore case.
string.Compare(colMap[s.ColumnName],
d.ColumnName, CompareOptions.OrdinalIgnoreCase) == 0
select
new { SourceColumn = s, DestinationColumn = d };
这会给你基于字典的项目可能的映射。
不隶属于 StackOverflow