我有一個Json檔案,里面有以下資料:
我有一個Json檔案,里面有以下資料:
[
{ "Id"/span>: 510, "Title": "Big Start", "作者": [{ "AuthId": 7777, "Name": "Tom" }] 。},
{ "Id": 511, "Title": "Rising Tide", "作者": [{ "AuthId": 6666, "Name": "Bob" }] }
]
對于上面的內容,我定義了以下的類:
我定義了以下的類
public class Book {
public int Id { get; set; }
public string Title { get; set; }
public List<Author> Authors { get; set; }
}
public class Author {
public int AuthId { get; set; }
public string Name { get; set; }
我使用以下代碼對json資料進行了反序列化:
List<Book> books;
using (StreamReader sr = new StreamReader(Server.MapPath("..."/span>))
{
books = JsonConvert.DeserializeObject<List<Item>>(sr.ReadToEnd()).ToList()
}
現在我想用作者姓名對書籍串列進行排序。我已經嘗試了以下方法:
var list = books.OrderBy(b => b.author.OrderBy(a => a.Name)).ToList()。
但是我得到錯誤資訊'至少有一個物件必須實作IComparable'。
誰能幫助我使用嵌套的作者姓名對上述串列進行排序。
提前感謝。
uj5u.com熱心網友回復:
事情是這樣的,Authors是一個串列,那么我們要按哪個作者的名字來排序?可能有很多。"Book1, by Alfred and Zeus", "Book2 by Zigo, Mary and Ada" - 這些書如何排序?如果Book2的作者是Ada、Mary和Zigo,他們如何排序?
如果只有一個作者,那就相當簡單了
var list = books.OrderBy(b => b.Authors.First().Name).ToList();
由于作者是一個串列,你也可以對其進行索引
。var list = books.OrderBy(b => b.Authors[0].Name).ToList()。
如果有一個以上的作者,你需要考慮一下哪個作者用于排序。如果多個作者作為打平分的人,就會變得更加復雜。你可以用一個跳過第一個作者的ThenBy來結束,但是你需要考慮你是否也要對作者進行排序。
記住,c#是對大小寫敏感的,所以 "bob "將排序在 "Tom "之后,而且如果這里沒有作者的話,上面的代碼將不起作用--你已經暗示總會有一個,但如果沒有的話,可以考慮FirstOrDefault()?.Name??"。
...有時最簡單的問題會導致最復雜的作業!;)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332742.html
標籤:
