Попробуйте этот вариант, я лично его использую:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
В вашем примере каждая Объект Word отличается , потому что нет сравнения, которое смотрит на свойство Text.
Однако нет причин создавать новый объект:
var distinctWords = (from w in split
select w).Distinct().ToList();
Или проще:
var distinctWords = new List<string>(split.Distinct());
Проблема в том, что вы создаете несколько объектов Word, содержащих одно и то же значение, но как компилятор должен знать, что это должны быть одинаковые элементы?
Попробуйте
(from w in split.Distinct()
select new Word { Text = w.ToString()}).ToList();
Вы не разместили код для своего класса Word
, но я предполагаю, что он не реализует Equals
со сравнением значений, поэтому вы получаете реализацию по умолчанию Equals
, которая просто проверяет ссылки на объекты. Обратите внимание, что если вы решите реализовать свою собственную версию Equals
, вам также необходимо правильно реализовать GetHashCode
.
Альтернативный способ решения этой проблемы - предоставить IEqualityComparer
в качестве параметра функции Distinct
.
Как отметили другие, проблема, вероятно, в том, что ваш объект Word
не реализует структурное равенство (сравнивается фактическое содержимое, а не ссылки на экземпляр). Если вы по-прежнему хотите получить в качестве результата коллекцию объектов Word
, но использовать Distinct
для базовых строковых значений, вы можете написать следующее:
IEnumerable<Word> distinctWords =
(from w in split.Distinct()
select new Word { Text = w.ToString() }).ToList();