我有一组课程如下:
public class ResponseWrapper
{
public IEnumerable<Book> data { get; set; }
}
public class Book
{
public List<Author> author_data { get; set; }
public string isbn13 { get; set; }
public string publisher_name { get; set; }
public string title { get; set; }
}
public class Author
{
public string name { get; set; }
public string id { get; set; }
}
Book类包含子Author项的列表。在我的情况下,我正在尝试选择集合中第一个作者项的“名称”属性。
我以为我可以使用以下方式选择它:
string author = response.data.Where(b => b.author_data.Any()).Select(b => b.author_data.FirstOrDefault().name);
然而,这将无法编译,我认为这是因为Select返回一个集合?在哪里,我只是想获得一个结果。
任何人都能告诉我正确的linq声明我需要获得我追求的单一结果吗?
由于
答案 0 :(得分:2)
我认为你的事情过于复杂。您只需使用First()
或FirstOrDefault()
即可选择第一项。
string author = response.data.First().author_data.First().name;
尽管确保你为null
而罢工。
string author = string.Empty;
Book firstBook = response.data.FirstOrDefault();
if (firstBook != null && firstBook.author_data.Any())
{
author = firstBook.author_data.First().name;
}
答案 1 :(得分:1)
试试这个
string author = response.data.Where(b => b.author_data.Any()).FirstOrDefault().author_data.FirstOrDefault().name;