Согласно Pro LINQ: языковой интегрированный запрос в C # 2008 , прототип оператора OrderBy равен
public static IOrderedEnumerable<T> OrderBy<T, K>(
this IEnumerable<T> source,
Func<T, K> keySelector)
where
K : IComparable<K>
Но документация MSDN не имеет общего ограничения на TKey , что он должен иметь тип IComparable<TKey>
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector
)
Я в основном сортирую Инвентарь по Единице , а затем по Размеру .
var sortedInventories = inventories
.OrderBy(inventory => inventory.Unit)
.OrderBy(inventory => inventory.Size);
Из приведенного выше фрагмента кода лямбда-выражения просто возвращают свойства инвентаря для сортировки. Это не похоже на выражение, которое возвращает IComparer<T>
Но, согласно логике, похоже, что лямбда-выражение должно иметь тип IComparer<T>
.
Какой из них является правильным объявлением OrderBy
?
(Apress.com Ошибка страницы не имеет информации об этом)
Вот пример приложения, которое я создал для тестирования OrderBy
public class Program
{
public static void Main(string[] args)
{
var inventories = new[] {
new Inventory { Unit = 1, Size = 2 },
new Inventory { Unit = 2, Size = 4 },
new Inventory { Unit = 3, Size = 6 },
};
var sortedInventories = inventories
.OrderBy(inventory => inventory.Unit)
.OrderBy(inventory => inventory.Size);
foreach (var inventory in sortedInventories)
Console.WriteLine("Unit: {0}; Size = {1}", inventory.Unit, inventory.Size);
}
}
public class Inventory
{
public int Unit { get; set; }
public double Size { get; set; }
}