嗨,我努力学习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 };

这会给你基于字典的项目可能的映射。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top