我有一个关于通过使用LINQ"搜索"其字段名来获取列表对象的问题.我为此编写了简单的类Library和Book类:
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做到这一点.有没有办法实现这个目标?
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,如果没有人发现.