Использование 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. Если нет, то код придется подправить, но общая идея должна быть ясна.