LINQ Order By, чтобы выбрать самый низкий индекс - PullRequest
6 голосов
/ 30 сентября 2010

Я относительно новичок в LINQ и не знаю, как сделать Order By. У меня есть IEnumerable список myObject и я хочу сделать что-то вроде select first myObject from myObjectList order by myObject.id asc Как мне это сделать? Спасибо

Ответы [ 7 ]

7 голосов
/ 30 сентября 2010

По возрастанию - это порядок по умолчанию по направлению.

var query = from myObject in myObjectList
            orderby myObject.id
            select myObject;

Object o = query.FirstOrDefault();

Если вы хотите убежать, вам нужно будет использовать orderby myObject.id descending.

3 голосов
/ 30 сентября 2010
var obj = myObjects.OrderBy(o => o.id).First();
2 голосов
/ 30 сентября 2010

Используйте метод Первый .

Например:

var data = (from o in Orders
           order by o.OrderID
           select o.Name).First();
1 голос
/ 01 октября 2010

Если вам нужен элемент с наименьшим идентификатором, вам не нужен OrderBy ... Намного быстрее просто перечислить список один раз, поскольку эта операция имеет сложность O(n), тогда как типичная сортировка имеет O(n log n)сложность.Вы можете сделать это с помощью цикла foreach или использовать такой метод расширения, как этот:

    public static T WithMin<T, TValue>(this IEnumerable<T> source, Func<T, TValue> selector)
    {
        var min = default(TValue);
        var withMin = default(T);
        bool first = true;
        foreach (var item in source)
        {
            var value = selector(item);
            int compare = Comparer<TValue>.Default.Compare(value, min);

            if (compare < 0 || first)
            {
                min = value;
                withMin = item;
            }
            first = false;
        }
        return withMin;
    }

Используйте его следующим образом:

var objectWithMinId = myObjectList.WithMin(o => o.Id);
0 голосов
/ 30 августа 2014

Я бы предпочел использовать FirstOrDefault () вместо First (), если ваш запрос не возвращает никаких элементов, тогда First () выдаст исключение.

var myObj = (from myObject in myObjectList orderby myObject.id select myObject).FirstOrDefault();
0 голосов
/ 01 октября 2010

Ваш запрос должен выглядеть следующим образом:

var yourquery = (from myObject in myObjectList
                 orderby myObject.id
                 select myObject).First();

Теперь переменная yourquery содержит требуемый объект.

0 голосов
/ 30 сентября 2010

По возрастанию используется по умолчанию, если вы хотите обратное, просто используйте OrderByDescending()

var obj = myObjectList.OrderBy(x => x.id).First();

, если вам нужен идентификатор или другое свойство объекта, вы можете оставить ту же строку

int myID = myObjectList.OrderBy(x => x.id).First().id;
...