Learning LINQ: QuickSort

.net, c#, linq

Solution

Just change the type of the parameter to `IEnumerable` and use the `var` construct instead of your `List<int>` for your local variables.

This will make your `QSLinq` method better because it will accept more types of parameters, for example `int[]`, as well as `List<int>`.

See the new method:

    public static IEnumerable<int> QSLinq(IEnumerable<int> _items)
    {
        if (_items.Count() <= 1)
            return _items;

        var _pivot = _items.First();

        var _less = from _item in _items where _item < _pivot select _item;
        var _same = from _item in _items where _item == _pivot select _item;
        var _greater = from _item in _items where _item > _pivot select _item;

        return QSLinq(_less).Concat(QSLinq(_same)).Concat(QSLinq(_greater));
    }

Hope this helps.

Problem

I took the plunge this afternoon and began studying LINQ, so far just mucking around with LINQ on collections. One of the first things I tried was to implement QSort. Now -- ignoring the fact that I could just use an ORDERBY and that this is a very silly qsort implementation -- what I came up with was this: ``` public class lqsort { public static List<int> QSLinq(List<int> _items) { if (_items.Count <= 1) return _items; int _pivot = _items[0]; List<int> _less = (from _item in _items where _item < _pivot select _item).ToList(); List<int> _same = (from _item in _items where _item == _pivot select _item).ToList(); List<int> _greater = (from _item in _items where _item > _pivot select _item).ToList(); return (QSLinq(_less).Concat(_same.Concat(QSLinq(_greater)))).ToList(); } } ``` The only thing that really bugs me is all of the casting involved. Are there any LINQ tricks I might use? Or am I just using LINQ for things it wasn't intended for?

Original source