我有五个强类型的List
个对象。每个List
内的每个对象都有属性Rating
和Vote
。
如何从所有List
个对象中仅选择10个评分最高的对象?如果Rating
相等,则需要使用Vote
示例(选择2最高评分):
List<Film>
:
0 element: rating = 1, vote = 2; 1 element: rating = 4, vote = 5;
List<Clubs>
:
0 element: rating = 5, vote = 3; 1 element: rating = 4, vote = 3;
结果:来自Clubs
的0个元素和来自Film
答案 0 :(得分:8)
尝试以下内容
var topTen = yourList.OrderBy(x =&gt; x.Rating).ThenBy(z =&gt; z.Vote).Take(10)
答案 1 :(得分:3)
您可以从以下内容开始:
var res = l1.Concat(l2).Concat(l3).Concat(l4).Concat(l5)
.OrderByDescending(k => k.Rating)
.ThenBy(k=>k.Vote)
.Take(10).ToList();
其中l1 ... l5是你的名单
答案 2 :(得分:2)
如果这些元素类型中没有共同的子类,您可以使用LINQ使用通用Tuple<int, int, object>
投影列表(即评级,投票和原始元素实例) )包含您感兴趣的两个属性。然后您可以执行一个简单的查询来选择前10个元素:
List<A> ax = /* ... */;
List<B> bx = /* ... */;
List<C> cx = /* ... */;
/* ... */
IEnumerable<Tuple<int, int, object>> ratingsAndVotes =
ax.Select((a) => Tuple.Create(a.Rating, a.Vote, a)).Concat(
bx.Select((b) => Tuple.Create(b.Rating, b.Vote, b)).Concat(
cx.Select((c) => Tuple.Create(c.Rating, c.Vote, c)) /* ... */;
Tuple<int, int, object>[] topTenItems =
ratingsAndVotes.OrderByDescending((i) => i.Item1).ThenByDescending((i) => i.Item2).Take(10).ToArray();
// topTenItems now contains the top 10 items out of all the lists;
// for each tuple element, Item1 = rating, Item2 = vote,
// Item3 = original list item (as object)
答案 3 :(得分:1)
您可以使用OrderBy和ThenBy按两个(或更多)字段排序,然后使用Take来获得前10名:
var myList = new List<Film>();
// ... populate list with some stuff
var top10 = myList.OrderBy(f => f.Rating).ThenBy(f => f.Vote).Take(10);
希望有所帮助:)