linq其中list包含列表中的任何列表

Vic*_*tor 108 c# linq

使用linq,如何检索其属性列表与另一个列表匹配的项目列表?

拿这个简单的例子和​​伪代码:

List<Genres> listofGenres = new List<Genre>() { "action", "comedy" });   
var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 192

听起来像你想要的:

var movies = _db.Movies.Where(p => p.Genres.Intersect(listOfGenres).Any());
Run Code Online (Sandbox Code Playgroud)

  • @Rebornx:使用`Contains`反复结束时间为O(x*y)操作,但空间为O(1),其中x是第一个集合的大小,y是第二个集合的大小.使用"Intersect"在时间上是O(x + y)但在空间中是O(y) - 它从第二个集合构造一个hashset,这使得它可以快速检查第一个集合中任何项目的包含.有关详细信息,请参阅https://codeblog.jonskeet.uk/2010/12/30/reimplementing-linq-to-objects-part-16-intersect-and-build-fiddling/ (6认同)

Bro*_*ass 59

您可以使用以下Contains查询:

var movies = _db.Movies.Where(p => p.Genres.Any(x => listOfGenres.Contains(x));
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您使用HashSet代替ListforlistofGenres您可以执行以下操作:

var genres = new HashSet<Genre>() { "action", "comedy" };   
var movies = _db.Movies.Where(p => genres.Overlaps(p.Genres));
Run Code Online (Sandbox Code Playgroud)