【问题标题】:How can I select the first child of a child using linq?如何使用 linq 选择孩子的第一个孩子?
【发布时间】:2013-10-27 18:08:25
【问题描述】:

我有一组类如下:

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 项的列表。就我而言,我正在尝试选择集合中 first Author 项目的“名称”属性。

我想我可以使用:

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

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

谁能告诉我正确的 linq 语句我需要得到我所追求的单一结果吗?

谢谢

【问题讨论】:

  • 将最后一个括号向左移一位:response.data.Where(b =&gt; b.author_data.Any()).Select(b =&gt; b.author_data.FirstOrDefault()).name;(不是在名称之后,而是在FirstOrDefault()之后。

标签: c# .net linq


【解决方案1】:

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

【讨论】:

【解决方案2】:

试试这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    相关资源
    最近更新 更多