0

我有一组类如下:

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 语句我需要得到我想要的单一结果吗?

谢谢

4

2 回答 2

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;
}
于 2013-10-27T10:02:25.173 回答
1

尝试这个

string author = response.data.Where(b => b.author_data.Any()).FirstOrDefault().author_data.FirstOrDefault().name;
于 2013-10-27T10:05:56.100 回答