Получить идентификатор строки с одинаковыми именем и фамилией - PullRequest
0 голосов
/ 20 сентября 2011
id    fname     lname     role
1     mark      anthony   lead
2     jeff      juarez    manager
3     matthew   gonzales  lead
4     mark      anthony   lead

У меня есть таблица выше.

Теперь мне нужно получить идентификаторы всех строк, которые имеют одинаковые имя и фамилию.

я пробовал ниже решение не работает

foreach (DataRow row1 in dataTable.Rows)
{
    foreach (DataRow row2 in dataTable.Rows)
    {
           var array1 = row1.ItemArray;
           var array2 = row2.ItemArray;

           if (array1[1] == array2[1])
           {
               Console.WriteLine("Equal");
           }
           else
           {
               Console.WriteLine("Not Equal");
           }
    }
}

Ответы [ 3 ]

3 голосов
/ 20 сентября 2011

Вы должны посмотреть как имя, так и фамилию, например так:

foreach (DataRow row1 in dataTable.Rows)
    foreach (DataRow row2 in dataTable.Rows)
    {
        var array1 = row1.ItemArray;
        var array2 = row2.ItemArray;

        if ((array1[1] == array2[1]) && (array1[2] == array2[2]))
        {
            Console.WriteLine("ID#" + array1[0].ToString() + " is equal to ID#" + array2[0].ToString());
        }
        else
        {
            Console.WriteLine("Not equal");
        }
    }

ОБНОВЛЕНИЕ - Чтобы удалить проблему самообнаружения, измените оператор if следующим образом

if ((array1[0] != array2[0]) && (array1[1] == array2[1]) && (array1[2] == array2[2]))
0 голосов
/ 20 сентября 2011

Вы также можете попробовать что-то вроде этого:

var result = from dt in dataTable.AsEnumerable()
             group dt by new { FirstName = dt.Field<string>("FirstName"), LastName = dt.Field<string>("LastName")} into g
             where g.Count() > 1
             select dt.id;
0 голосов
/ 20 сентября 2011

Я предполагаю, что вы имеете в виду, получить все идентификаторы, где имя = фамилия (например, "Mark Mark").

DataRow[] searchResults = dataTable.Select("fname = lname");

или, чтобы зациклить

foreach (DataRow dr in dataTable.Select("fname = lname"))
{
     //Do something cool.
}
...