sowjanyam Ответов: 4

Запрос Linq для выбора отдельных строк из таблицы без учета регистра


Я использую следующий динамический запрос Linq для выбора отдельных строк:

var distinctValue = (from row in orgdt.AsEnumerable()
                                     select new { NAME = row.Field<string>("NAME")}).Distinct().ToList(); </string>


NAME есть столбец таблицы - в нем может быть две строки типа Emp и emp.
В списке отображаются 2 имени, но мое требование состоит в том, чтобы отображался только один. Как это можно сделать?

4 Ответов

Рейтинг:
2

Not Active

Используйте предложение where. Как и в этом случае,

from row in orgdt.AsEnumerable()
where row.Field("NAME") == "Emp"


Рейтинг:
1

Ian Shlasko

Distinct() можно принять IEqualityComparer в качестве аргумента. Предоставьте тот, который выполняет сравнение строк без учета регистра.


Рейтинг:
0

Magnus_

Вы должны изменить параметры сортировки этого столбца (или всей базы данных) на "нечувствительные к регистру" или выполнить отдельную операцию в коде.


Рейтинг:
0

binurajv

Попробовать это:

var distNames = данные.Выберите(s => s.Name.Нижестоящим()).Различны().Список()


Richard Deeming

Ужасная идея. Вы создаете новую копию каждой строки в списке, что будет неэффективно. И вы нормализуетесь до нижнего регистра, что означает, что вы можете попасть под проблему "турецкого я".

Проблема по-турецки, я и почему тебя должно волновать-ты Haacked[^]
CA1308: нормализация строк в верхний регистр - Visual Studio | Microsoft Docs[^]

Решение 3 является правильным решением: передайте нечувствительный к регистру компаратор равенства в Distinct метод.