号外号外: 原[图享网]更名为 码友网(codedefault.com) 啦,感谢大家一路上的陪伴与支持。代码的世界里,码友网与大家一起同行!

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

C#开发 作者: Rector 377阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在.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根据一个集合的某个属性对另一个集合进行排序?

发布于: 2018-05-07 11:07:45
分享扩散: