我对LINQ比较陌生,不知道怎么做Order By。我有一个IEnumerable的myObject列表,想要做select first myObject from myObjectList order by myObject.id asc
这样的事情我怎样才能做到这一点?感谢
答案 0 :(得分:7)
升序是按方向的默认顺序。
var query = from myObject in myObjectList
orderby myObject.id
select myObject;
Object o = query.FirstOrDefault();
如果您想要降序,则需要使用orderby myObject.id descending
。
答案 1 :(得分:3)
var obj = myObjects.OrderBy(o => o.id).First();
答案 2 :(得分:2)
答案 3 :(得分:1)
如果你想要ID最低的项目,你不需要一个OrderBy ...只需枚举一次列表要快得多,因为这个操作有O(n)
复杂度,而典型的排序有{{} {1}}复杂性。您可以使用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;
}
答案 4 :(得分:0)
如果您希望反向使用OrderByDescending()
var obj = myObjectList.OrderBy(x => x.id).First();
如果你需要对象的ID或其他属性,你可以保持同一行
int myID = myObjectList.OrderBy(x => x.id).First().id;
答案 5 :(得分:0)
您的查询应如下所示:
var yourquery = (from myObject in myObjectList
orderby myObject.id
select myObject).First();
现在变量yourquery包含你需要的对象。
答案 6 :(得分:0)
我更喜欢使用FirstOrDefault()代替First(),如果你的查询没有返回任何元素,那么First()将抛出异常。
var myObj = (from myObject in myObjectList orderby myObject.id select myObject).FirstOrDefault();