問題は、ステートメントがグループ化を作成することですが、ユーザーの単純なリストを返そうとしています。
これを修正するには、次の 2 つの方法があります。
- の
IDictionary<string,IList<User>>
代わりに(キーとしてもIEnumerable<User>
使用できます)、またはchar
- 単純なリストを返したい場合は、ユーザーをグループ化するのではなく、名前で並べ替えることができます。
これを にする方法は次のIDictionary<string,IList<User>>
とおりです。
IDictionary<string,IList<User>> res = new UserService()
.GetUsers(id.Value, pageNumber: _pageNum)
.GroupBy(x=>x.Name.Substring(0,1))
.ToDictionary(
g => g.Key
, g => (IList<User>)g.ToList()
);
EDIT : (このコメントへの応答: 「A で始まるすべての名前が A ヘッダーの下にあるようにグループ化したいので、実際には並べ替えではなく、外観を変更するだけです」)
このような場合、グループ化は必要ありません(ただし、必要に応じてグループ化を利用できます)。代わりに、LINQ、SP、またはその他の方法でデータを注文し、異なる文字で始まる名前間の境界に挿入することで視覚的にヘッダーを提供できます。
これは、コンソールに出力するプログラムで実行する非常に大雑把な例です。少しの作業で、特定のビジュアルに適応させることができるはずです。
// I assume that you know how to write the GetUsersSortedByName method
IList<User> sortedUsers = GetUsersSortedByName();
char? lastSeenFirstLetter = null;
// The loop below assumes that there are no users with empty names
foreach (User u in sortedUsers) {
if (u.Name[0] != lastSeenFirstLetter) {
Console.WriteLine("==== Header: users with names in {0}", u.Name[0]);
lastSeenFirstLetter = u.Name[0];
}
Console.WriteLine(u); // Finally, display the user
}