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)
);