如何使用 linq 选择孩子的第一个孩子

本文关键字:孩子 第一个 选择 何使用 linq | 更新日期: 2023-09-27 18:37:04

我有一组类,如下所示:

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 类包含子作者项的列表。就我而言,我正在尝试选择集合中第一个作者项的"name"属性。

我想我可以使用以下方法选择它:

string author = response.data.Where(b => b.author_data.Any()).Select(b => b.author_data.FirstOrDefault().name);

但是这不会编译,我认为这是因为 Select 返回了一个集合?我只是想得到一个结果。

谁能告诉我获得我想要的单一结果所需的正确 linq 语句?

谢谢

如何使用 linq 选择孩子的第一个孩子

我认为你把事情复杂化了。您可以仅使用 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;
}

试试这个

string author = response.data.Where(b => b.author_data.Any()).FirstOrDefault().author_data.FirstOrDefault().name;