2013-04-05 6 views
0

У меня есть два списка C# (список ListA и список listB) , как я могу сравнить эти два, и если будет найден дубликат (определенных столбцов, например, ID_num и ID_cust), то обновление столбец «ID_duplicate», который является значением идентификатора столбцов listB.C# сравнить два списка и обновить значения столбца

DataSet ds = subMain; 

List<string> listA = (from r in ds.Tables[0].AsEnumerable() 
         Select r.Field<string>("ID_num") + 
         r.Field<string>("ID_cust")).ToList(); 

DataSet dsMain = Mains; 

List<string> listB = (from r in dsMain.Tables[0].AsEnumerable() 
         select r.Field<string>("ID_num") + 
         r.Field<string>("ID_cust")).ToList(); 

Я хочу, что listA будет содержать новый столбец ID_duplicate со значением ID_num от listB.

Так что дубликаты будут как-то связаны с этим ID_num.

Я затем обновлю это ID_duplicate в базе данных.

Редактировать: Добавлено больше пояснений в комментарии ниже.

+0

Пожалуйста, покажите нам свой код. Это может помочь в понимании вашего вопроса. –

+0

так, что у вас есть два типа данных, и вы хотите найти дубликаты данного столбца в одном файле данных в данном столбце в другом формате данных? –

+0

Короче говоря, У меня есть два набора данных, которые преобразуются в два списка (listA, listB). Оба списка имеют одинаковые столбцы (columnA, columnB), но listA также получил столбец ID_duplicate (значение null по умолчанию), а listB имеет идентификатор столбца Я хочу сравнить listA с listB и если найдены дубликаты, столбец обновления ID_duplicate (в listA) со значением из идентификатора столбца в listB, а затем обновить значения в таблице DB, скажем, listA - таблица «tableA». – SuperManSL

ответ

0

Если я понимаю, это присоединиться:

var listA = new List<Row> { 
    new Row { ID= 1, IdNum = 1, IdCust = 1 }, 
    new Row { ID= 2, IdNum = 1, IdCust = 2 }, 
    new Row { ID= 3, IdNum = 2, IdCust = 1 }, 
    new Row { ID= 4, IdNum = 1, IdCust = 3 }, 
    new Row { ID= 5, IdNum = 3, IdCust = 1 }, 
    new Row { ID= 6, IdNum = 4, IdCust = 1 } 
}; 

var listB = new List<Row> { 
    new Row { ID= 1, IdNum = 5, IdCust = 1 }, 
    new Row { ID= 5, IdNum = 6, IdCust = 2 }, 
    new Row { ID= 7, IdNum = 2, IdCust = 1 }, 
    new Row { ID= 9, IdNum = 1, IdCust = 3 }, 
    new Row { ID= 11, IdNum = 7, IdCust = 2 } 
}; 

    var t = (from a in listA 
      join b in listB on a.IdCust.ToString() + a.IdNum.ToString() 
      equals 
      b.IdCust.ToString() + b.IdNum.ToString() 
      select new 
      { 
       ID = a.ID, 
       IdUpdate = b.ID 
      }).ToArray(); 

foreach (var item in t) 
{ 
    Console.WriteLine("ID {0} IdUpdate {1}", item.ID, item.IdUpdate); 
} 

Здесь класс Row

class Row 
{ 
    public int ID { get; set; } 

    public int IdNum { get; set; } 

    public int IdCust { get; set; } 
} 

Obviusly вы можете создать вычисляемый столбец на классе строки, как этот

public string ValueToCompare 
{ 
    get 
    { 
     return this.IdNum.ToString() + this.IdCust.ToString(); 
    } 
} 

и использования это для соединения

Макс.

+0

Max будет работать с ListView (чтобы его можно было отображать в списке, а не в списке)? Я использую окна. Tnx! – SuperManSL

+1

Я не знаю, в вашем примере вы заполняете список объектами со значением набора данных и на основании моего примера на этом подходе вместо DataSet попробуйте Entity Framework ..... – Max

Смежные вопросы