Как мне найти похожие имена столбцов с помощью linq?

StackOverflow https://stackoverflow.com/questions/538208

Вопрос

Привет, я пытаюсь выучить Linq, поэтому я не уверен, можно ли это сделать.

Я работаю над импортировать проект Поэтому я решил импортировать данные, используя DataSets.

Моя задача на данный момент:Имея 2 таблицы данных с разными схемами, одна из которых содержит мою целевую схему, а другая - мою исходную схему.

Что мне нужно сделать, это выполнить некоторое сопоставление столбцов, где я могу идентифицировать мои исходные столбцы, которые "в чем-то похоже" к моим столбцам назначения.На данный момент я ищу что-то, где, если какая-либо часть имени столбца назначения содержится в источнике, это возможное совпадение Я не знаю ни одного способа определить вероятность.

Например источник [имя, фамилия, адрес] - > пункт назначения [fname, lname, addr1]

Итак, является ли LINQ потенциальным кандидатом на эту работу?Или регулярные выражения?Я начал с этого

Наличие исходного DataTable 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