嵌套where子句

时间:2013-12-06 17:34:34

标签: c# linq

我有一个用户词典Dictionary<String, User> usersBase

每个用户都有一个评分列表List<UserRating> ratings。每个评级都包含电影ID和评级的字符串。

class UserRating
{
        private String movieId;
        private int rating;
}

我正在尝试获取已评定特定ID的用户列表

List<User> commun = new List<User>();
commun = usersBase.Values.Where(x => x.Ratings.Where(y => y.MovieId == movieId)).ToList(); 

我有以下错误

  

无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'bool'

有人可以向我解释如何执行此操作以及为什么会出现此错误?

2 个答案:

答案 0 :(得分:5)

.Where期望一个返回bool的lambda。您的嵌套where子句将返回IEnumerable。

请改为尝试:

 commun = usersBase.Values.Where(x => x.Ratings.Any(y => y.MovieId == movieId)).ToList();

答案 1 :(得分:2)

使用.Any

List<User> commun = new List<User>();
commun = usersBase.Values.Where(x => x.Ratings.Any(y => y.MovieId == movieId)).ToList(); 

内部.Where会返回IEnumberable<TP4_IFT501.UserRating>。当你需要一个布尔值时,你就会在.Where外部IEnumerable提供这个问题。