Использование Distinct()

Возникла проблема при обработки данных, я беру excel файл, читаю и вытаскиваю из него столбец 'M' в combobox. Проблема в том, что есть данные, которые повторяются в excel и я хочу их убрать из combobox'а.

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
var fileExcel = @"C:\products.xlsx";
try
{
    using (var excel = new ExcelPackage(new FileInfo(fileExcel)))
    {
        using (var mainWorkSheet = excel.Workbook.Worksheets[0])
        {
            int rowStart = 2;
            int rowEnd = mainWorkSheet.Cells.End.Column; //mainWorkSheet.Dimension.End.Row;

            string cellRange = $"M{rowStart}" + ":" + $"M{rowEnd}";

            foreach (var item in mainWorkSheet.Cells[cellRange])
            {
                string[] itemArr = { item.ToText() };
                IEnumerable<string> itemNum = itemArr.Distinct();
                foreach (var items in itemNum)
                {
                    brands.Items.Add(items);
                }   
            }   
        }
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
}

Ответы (1 шт):

Автор решения: default locale

Не имеет смысла выполнять Distinct на массиве из одного элемента. Нужно сначала собрать значения всех ячеек, а затем выполнять Distinct:

var items = new List<string>();
foreach (var item in mainWorkSheet.Cells[cellRange])
{
    items.Add(item.ToText());
}   
brands.Items.AddRange(items.Distinct());

Либо сразу:

brands.Items.AddRange(mainWorkSheet.Cells[cellRange].Select(i -> i.ToText()).Distinct());

Я не знаю, какой тип у Items и есть ли у него AddRange. Если нет, то код придется подправить, но общая идея должна быть ясна.

→ Ссылка