我想使用 Grade 進行分組,并根據每個組中的元素數按降序排序,然后使用 Number 屬性按升序對每個組元素進行排序。我試過了,但它不起作用。你能幫我解決我做錯了什么嗎?
以下是錯誤內容:
無法從用法中推斷方法 'System.Linq.Enumerable.OrderBy<TSource,TKey>(System.Collections.Generic.IEnumerable, System.Func<TSource,TKey>)' 的型別引數。嘗試明確指定型別引數。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp6
{
internal class Program
{
static void Main(string[] args)
{
List<Test> list = new List<Test>
{
new Test { Grade = "C", Name = "apple1", Number = 10 },
new Test { Grade = "C", Name = "apple2", Number = 90 },
new Test { Grade = "C", Name = "apple3", Number = 30 },
new Test { Grade = "B", Name = "orange1", Number = 12 },
new Test { Grade = "B", Name = "orange2", Number = 31 },
new Test { Grade = "A", Name = "pineapple1", Number = 63 },
new Test { Grade = "A", Name = "pineapple2", Number = 13 },
new Test { Grade = "A", Name = "pineapple3", Number = 23 },
new Test { Grade = "A", Name = "pineapple4", Number = 93 },
new Test { Grade = "A", Name = "pineapple5", Number = 463 },
new Test { Grade = "A", Name = "pineapple6", Number = 14 },
new Test { Grade = "D", Name = "watermelon", Number = 74 }
};
//
//CS0411
//The type arguments for method cannot be inferred from the usage.
//Try specifying the type arguments explicitly.
var aaa = list.GroupBy(x => x.Grade, x => (x.Name, x.Number))
.Where(g => g.Count() >= 1)
.OrderByDescending(g => g.Count())
.ThenBy(g => g.Select(a => a.Number).ToList().Sort((x, y) => x.CompareTo(y)))
.ToList();
//expected answers
//{ Grade = "A", Name = "pineapple2", Number = 13 }
//{ Grade = "A", Name = "pineapple6", Number = 14 }
//{ Grade = "A", Name = "pineapple3", Number = 23 }
//{ Grade = "A", Name = "pineapple1", Number = 63 }
//{ Grade = "A", Name = "pineapple4", Number = 93 }
//{ Grade = "A", Name = "pineapple5", Number = 463 }
//{ Grade = "C", Name = "apple1", Number = 10 }
//{ Grade = "C", Name = "apple3", Number = 30 }
//{ Grade = "C", Name = "apple2", Number = 90 }
//{ Grade = "B", Name = "orange1", Number = 12 }
//{ Grade = "B", Name = "orange2", Number = 31 }
//{ Grade = "D", Name = "watermelon", Number = 74 }
}
}
class Test
{
public string Grade { get; set; }
public string Name { get; set; }
public int Number { get; set; }
}
}
uj5u.com熱心網友回復:
我想使用 Grade 進行分組,并根據每個組中的元素數按降序排序,然后使用 Number 屬性按升序對每個組元素進行排序。
那不是ThenBy目的。為相同的序列ThenBy提供二級排序。這并不意味著在序列中的專案內執行排序。(此外,你的 lambda 運算式的最后一部分is ,它回傳... 而編譯器期望一個回傳“你想要執行二級排序的東西”的委托。)ThenByList<T>.Sortvoid
“外部序列”最終是一個組序列。如果要轉換這些組中的每一個,則需要使用Select. 所以我懷疑你想要:
var aaa = list.GroupBy(x => x.Grade, x => (x.Name, x.Number))
// Order the groups by descending size of group
.OrderByDescending(g => g.Count())
// Order the elements of each individual group by number
.Select(group => group.OrderBy(a => a.Number).ToList())
.ToList();
注意:我洗掉了該Where子句,因為它GroupBy永遠不會產生任何空組。
或者,假設回傳的組的元素GroupBy與原始序列中的元素相同,您可以先按數字對原始序列進行排序:
var aaa = list
.OrderBy(x => x.Number)
.GroupBy(x => x.Grade, x => (x.Name, x.Number))
.OrderByDescending(g => g.Count())
.ToList();
這樣,您仍然會得到一系列IGrouping元素,而不僅僅是一系列串列......這意味著您仍然可以訪問每個組的鍵。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438266.html
下一篇:在c#中加入多個物件串列
