如何通过列表中的属性值获取/查找对象

Doğ*_*lıç 4 c# linq

我有一个关于通过使用LINQ"搜索"其字段名来获取列表对象的问题.我为此编写了简单的类LibraryBook类:

class Book
{
    public string title { get; private set; }
    public string author { get; private set; }
    public DateTime indexdate { get; private set; }
    public int page { get; private set; }

    public Book(string title,string author, int page)
    {
        this.title = title;
        this.author = author;
        this.page = page;
        this.indexdate = DateTime.Now;
    }
}

class Library
{
    List<Book> books = new List<Book>();

    public void Add(Book book)
    {
        books.Add(book);
    }

    public Book GetBookByAuthor(string search)
    {
        // What to do over here?
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我想得到Book某些字段等于某些字符串的实例,比如

if(Book[i].Author == "George R.R. Martin") return Book[i];
Run Code Online (Sandbox Code Playgroud)

我知道使用简单的循环代码是可能的,但我想用LINQ做到这一点.有没有办法实现这个目标?

Tom*_*oni 9

var myBooks = books.Where(book => book.author == "George R.R. Martin");
Run Code Online (Sandbox Code Playgroud)

并记得添加: using System.Linq;

在您的特定方法中,由于您只想返回本书,您应该写:

public Book GetBookByAuthor(string search)
{
    var book = books.Where(book => book.author == search).FirstOrDefault();
    // or simply:
    // var book = books.FirstOrDefault(book => book.author == search);
    return book;
}
Run Code Online (Sandbox Code Playgroud)

Where收益的IEnumerable<Book>,则FirstOrDefault返回在枚举或发现的第一本书null,如果没有人发现.