如何获取(或过滤)具有相同userID和artistID的记录的列表
这是我的评级对象
public class Rating
{
public int userID { get; set; }
public int artistID { get; set; }
public int rating { get; set; }
}
这是我的数据
Rating rate1 = new Rating { artistID = 1, userID = 101, rating = 2 };
Rating rate2 = new Rating { artistID = 1, userID = 102, rating = 4 };
Rating rate3 = new Rating { artistID = 2, userID = 101, rating = 3 };
Rating rate4 = new Rating { artistID = 2, userID = 102, rating = 5 };
Rating rate5 = new Rating { artistID = 3, userID = 102, rating = 1 };
List<Rating> ratings = new List<Rating>(2);
ratings.Add(rate1);
ratings.Add(rate2);
ratings.Add(rate3);
ratings.Add(rate4);
ratings.Add(rate5);
如果有记录,则输出: 其中userID = 101,和 where(artistID,其中userID为101)
我想要的输出示例:
artistID userID rating
1 101 2
1 102 4
2 101 3
2 102 5
我还想要1, 102, 4
因为此artistID
还有另一个评级,其中userID为101.同样适用于2, 102, 5
。
更新 如果您想要包含所有记录,其中包含不同用户但具有相同艺术家的其他记录(引自@Tim Schmelter)。您可以在更新版本中找到@Tim Schmelter的答案。
例如,如果您将rate5更改为Rating rate5 = new Rating { artistID = 3, userID = 101, rating = 1 };
并添加新对象rate6 Rating rate6 = new Rating { artistID = 3, userID = 102, rating = 1 };
它会产生结果:
artistID userID rating
1 101 2
1 102 4
2 101 3
2 102 5
3 101 1
3 102 1
因为userID-101评级的artistID也被userid-102评级 你可以在@Tim Schmelter的回答中找到答案。
答案 0 :(得分:4)
因此,您希望userID
为101的所有评分或者artistID
= 101的userID
的评分为何?您可以在Any
中使用Where
:
var query = ratings.Where(r => r.userID == 101 ||
ratings.Any(rr => rr.userID == 101 && r.artistID == rr.artistID));
这类似于sql中的相关子查询。
测试:
foreach (Rating r in query)
Console.WriteLine("artistID = {0}, userID = {1}, rating = {2}"
, r.artistID, r.userID, r.rating);
结果:
artistID = 1, userID = 101, rating = 2
artistID = 1, userID = 102, rating = 4
artistID = 2, userID = 101, rating = 3
artistID = 2, userID = 102, rating = 5
更新 &#34;我希望所有记录中有另一条记录,但不同的用户只有同一位艺术家&#34;
现在很清楚,你想要这个:
var query = ratings
.Where(r => ratings
.Any(rr => r.artistID == rr.artistID && rr.userID != r.userID));