Вид C# linq - быстрый способ инстанцировать IComparer

Можно использовать ISNULL и проверить ответ по известному выводу:

SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST
28
задан Tim Coker 25 October 2012 в 18:36
поделиться

4 ответа

Это одно из использования лямбда-выражений:

c.Sort ((x, y) => xACompareTo (yA))

EDIT : исправленный пример возврата int (с использованием CompareTo) вместо bool

56
ответ дан 28 November 2019 в 02:23
поделиться

Понятия не имею, что такое c.Sort () в вашем примере, так как это может быть много вещей (вы имеете в виду List . Sort () ?), Но одна вещь, которой он точно не является, - это LINQ. LINQ не имеет Sort () - у него есть OrderBy () .

Тем не менее, последний также работает с IComparer , и нет никакого способа для создания экземпляра анонимного класса, реализующего "встроенный" интерфейс, поэтому вам нужно будет определить класс.

Для List .Sort () существует перегрузка, которая принимает Comparison . Поскольку это тип делегата, вы можете использовать лямбда для предоставления встроенной функции:

List<int> xs = ...;
xs.Sort((x, y) => y - x); // reverse sort
7
ответ дан 28 November 2019 в 02:23
поделиться

У меня есть класс ProjectionComparer в MiscUtil , поэтому вы можете:

IComparer<Foo> comparer = ProjectionComparer<Foo>.Create(x => x.Name);
c.Sort(comparer);

Код также находится в этот ответ .

Вы можете создать экземпляр Comparison напрямую с лямбда-выражением, но мне вообще не нравится такое дублирование. Сказав это, часто оказывается несколько короче ...

РЕДАКТИРОВАТЬ: Как отмечалось, начиная с .NET 4.5, используйте Comparer .Create , чтобы сделать то же самое.

16
ответ дан 28 November 2019 в 02:23
поделиться

Если объекты в списке уже реализуют IComparable, вам не понадобится другой. Но если вам нужно настраиваемое сравнение, вы можете реализовать IComparer во вложенном классе. Вы также можете использовать лямбда-выражение для создания метода сравнения "на лету":

people.Sort ((person1, person2) => person1.Age.CompareTo (person2.Age));

3
ответ дан 28 November 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: