I have a list of Company objects with name, address, email, etc. I need a way to sort the list by company name (which I can easily do). But then I need to compare the email and city. If one of those matches a company with the same name, I need to remove BOTH of them.
I can easily do the .First to get one and remove the matching one but I need the original to be removed from the list as well. Make sense? The bottom 2 LINQ statements remove the duplicate but not the original
for (int i = 2; i <= 10749; i++) //Range.UsedRange isnt working for some reason so I hard coded the row numbers
{
    firm = new Firm();
    string begCell;
    begCell = "B" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    firm.acctNo = fixNullValues(Convert.ToString(excelCell.Value2));
    begCell = "C" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    firm.name = fixNullValues(Convert.ToString(excelCell.Value2));
    begCell = "D" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    firm.addy1 = fixNullValues(Convert.ToString(excelCell.Value2));
    begCell = "E" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    firm.city = fixNullValues(Convert.ToString(excelCell.Value2));
    begCell = "F" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    firm.state = fixNullValues(Convert.ToString(excelCell.Value2));
    begCell = "G" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    firm.zip = fixNullValues(Convert.ToString(excelCell.Value2));
    begCell = "H" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    firm.phone = fixNullValues(Convert.ToString(excelCell.Value2));
    begCell = "I" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    firm.email = fixNullValues(Convert.ToString(excelCell.Value2));
    begCell = "AB" + i;
    excelCell = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range(begCell, begCell);
    if (Convert.ToString(excelCell.Value2).Equals("Active", StringComparison.OrdinalIgnoreCase))
        firm.active = true;
    if (firm.active)
        firmList.Add(firm);
}
var sortedList = firmList.OrderBy(o => o.name).ToList();
var removeDupEmails = firmList.GroupBy(x => x.name).SelectMany(x =>
                             x.OrderByDescending(y => y.email)
                             .Take(1)
                         );
var removeDupZips = firmList.GroupBy(x => x.name).SelectMany(x =>
                             x.OrderByDescending(y => y.addy)
                             .Take(1)
                         );
 
     
     
    