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 アイテムのリストが含まれています。私の場合、コレクション内の最初のAuthor アイテムの 'name' プロパティを選択しようとしています。

次を使用して選択できると思いました:

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 に答える