LINQ Order By 选择最低索引

发布于 2024-09-25 07:02:45 字数 167 浏览 0 评论 0原文

我对 LINQ 比较陌生,不知道如何执行 Order By。我有一个 myObject 的 IEnumerable 列表,并且想要执行类似 select first myObject from myObjectList order by myObject.id asc 我该如何完成此操作?谢谢

I am relatively new to LINQ and don't know how to do an Order By. I have an IEnumerable list of myObject and want to do something like select first myObject from myObjectList order by myObject.id asc How can I accomplish this? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

油焖大侠 2024-10-02 07:02:45

升序是默认的方向顺序。

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

Object o = query.FirstOrDefault();

如果您想要降序,则需要使用 orderby myObject.id 降序

Ascending is the default order by direction.

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

Object o = query.FirstOrDefault();

If you want descending, you will want to use orderby myObject.id descending.

呢古 2024-10-02 07:02:45
var obj = myObjects.OrderBy(o => o.id).First();
var obj = myObjects.OrderBy(o => o.id).First();
挽袖吟 2024-10-02 07:02:45

使用第一种方法。

例如:

var data = (from o in Orders
           order by o.OrderID
           select o.Name).First();

Use the First method.

For example:

var data = (from o in Orders
           order by o.OrderID
           select o.Name).First();
如日中天 2024-10-02 07:02:45

如果您想要具有最低 ID 的项目,则不需要 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);

If you want the item with the lowest ID, you don't need an OrderBy... It is much faster to just enumerate the list once, since this operation has O(n) complexity whereas a typical sort has O(n log n) complexity. You can do it with a foreach loop, or use an extension method like this one:

    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;
    }

Use it like that:

var objectWithMinId = myObjectList.WithMin(o => o.Id);
葮薆情 2024-10-02 07:02:45

升序是默认的,如果您想要相反,只需使用OrderByDescending(),

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

如果您需要对象的ID或其他一些属性,您可以保留同一行

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

Ascending is the default if you wanted the reverse just use OrderByDescending()

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

if you needed the ID or some other property from the object you can keep the same line

int myID = myObjectList.OrderBy(x => x.id).First().id;
一念一轮回 2024-10-02 07:02:45

您的查询应如下所示:

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

现在变量 yourquery 包含您需要的对象。

Your query should look like following:

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

Now the variable yourquery contains the object you require.

芯好空 2024-10-02 07:02:45

我更喜欢使用 FirstOrDefault() 代替 First() ,如果您的查询不返回任何元素,那么 First() 将抛出异常。

var myObj = (from myObject in myObjectList orderby myObject.id select myObject).FirstOrDefault();

I would prefer using FirstOrDefault() in place of First() , in case your query does not return any elements then First() will throw a Exception.

var myObj = (from myObject in myObjectList orderby myObject.id select myObject).FirstOrDefault();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文