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

时间:2013-10-27 09:59:22

标签: c# .net linq

我有一组课程如下:

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声明我需要获得我追求的单一结果吗?

由于

2 个答案:

答案 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;