如何正确使用C#Linq获取筛选列表?

时间:2016-10-18 19:55:20

标签: c# linq lambda

比如说我有C#LINQ查询如下:

var allBooks = from book in books
               select book;
var booksNonFiction = allBooks.Where(x => x.Genre = NonFiction) 

在此示例中,我想获取NonFiction集合中的所有allBooks个标题。我对lambda表达有点不确定。

5 个答案:

答案 0 :(得分:6)

你可以避免使用allbooks linq,它包含与书籍相同的集合。

var booksNonFiction = books.Where(x => x.Genre == "NonFiction");

如果您想订购数据

var booksNonFiction = books.Where(x => x.Genre == "NonFiction").OrderBy(b => b.Title);

答案 1 :(得分:1)

你只需要一个双=:

Where(x => x.Genre **==** NonFiction)

答案 2 :(得分:1)

你不需要先贱人,因为它说:列举所有书籍并归还它们。 并且还需要实际枚举集合的方法,没有它,它仍然只是一个查询。

var booksNonFiction = books.Where(x => x.Genre == NonFiction).ToList()

答案 3 :(得分:1)

为了理解如何在lambda表达式中思考,它帮助我翻译了" x =>"进入"序列中的每个x"

在您的示例中,AllBooks是一系列书籍。所以你的陈述:

var booksNonFiction = allBooks.Where(x => x.Genre == NonFiction) 

将转化为:"从所有书籍的序列中,取出" book.genre等于非小说的每本书"

如果你有更难的linq语句,如果你的序列(集合)使用复数名词,并且lambda表达式的参数(你使用x的地方)使用单数名词,它会有所帮助。这有助于你记住每个x意味着什么。

var nonFictionBooks = allBooks.Where(book => book.Genre == NonFiction)

在这里你可以看到这本书是allBooks集合的一个元素。

var frontPages = allBooks.Where(book => book.Genre == NonFiction)
    .Select(book => book.FirstPage)

即使您现在可能还没有使用Select语句,您也可以理解它意味着每本书都会出现#34;在所有书籍的集合中,你应该拿书。第一页。

为了帮助理解Linq的可能性,文章The Standard Linq operators帮助我学习了最常用的Linq语句

Linq严重依赖扩展方法。如果您对此不熟悉,以下内容可能有所帮助:Extension Methods Demystified

答案 4 :(得分:0)

1.如果类型是Enum:

var booksNonFiction = allBooks.Where(x => x.Genre.Equals(Genre.NonFiction));

2.如果类型是一个字符串:

var booksNonFiction = allBooks.Where(x => x.Genre.Equals("NonFiction"));