首页 / C#开发 / 正文

[LINQ].NET/C#应用程序开发如何使用LINQ根据一个集合的某个属性对另一个集合进行排序?

2215 发布于: 2018-05-07 读完约需4分钟

问题描述

在.NET/C#应用程序开发中,有两个对象的集合。其中,一个为数字类型的集合:List<int>,另一个为类对象集合:List<T>,这个类包含一个ID属性。

现在需要对List<T>集合进行排序,其排序的规则是依据数字集合List<int>中的顺序进行排序。

在.NET/C#的应用程序开发中,使用Linq可以如何实现呢?

方案一

使用LINQ查询表达式,如下:

var orderedByIDList = from i in ids 
                       join o in objectsWithIDs
                       on i equals o.ID
                       select o;

方案二

借助字典Dictionary来实现,如下:

List<int>  order = ....;
List<Item> items = ....;

Dictionary<int,Item> d = items.ToDictionary(x => x.ID);

List<Item> ordered = order.Select(i => d[i]).ToList();

方案三

使用LINQ中的Zip(...)方法来实现,如下:

var result = objects.Zip(ints, (o, i) => new { o, i})
                    .OrderBy(x => x.i)
                    .Select(x => x.o);

方案四

创建一个排序的静态扩展方法,如下:

public static IEnumerable<TResult> SortBy<TResult, TKey>(this IEnumerable<TResult> sortItems,
                                                         IEnumerable<TKey> sortKeys,
                                                         Func<TResult, TKey> matchFunc)
{
    return sortKeys.Join(sortItems,
                         k => k,
                         matchFunc,
                         (k, i) => i);
}

调用示例:

var sorted = toSort.SortBy(sortKeys, i => i.Key);

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [LINQ].NET/C#应用程序开发中如何使用LINQ查询出DataTable中某一列的所有行并转换成对应集合后去重和排序?

下一篇: [LINQ].NET/C#应用程序开发如何使用LINQ的Max()方法查询某个集合中的一条记录?

本文永久链接码友网 » [LINQ].NET/C#应用程序开发如何使用LINQ根据一个集合的某个属性对另一个集合进行排序?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册