需要一个查询,其中列表不包含另一个列表的项目

时间:2014-10-11 16:26:30

标签: c# .net parse-platform

我有一个ParseUsers(localPlayers)的本地列表和ParseObject(remoteGame)中包含ParseUsers的列表。我想找到所有不包含本地ParseUsers列表中任何玩家的对象。

到目前为止,我尝试了三种不同的选项:

1:

ParseQuery<ParseGame> query = from remoteGame in new ParseQuery<ParseGame>()
                              where !remoteGame.Players.Any(x => localPlayers.Contains(x))
                              select remoteGame;

2:

ParseQuery<ParseGame> query = from remoteGame in new ParseQuery<ParseGame>()
                              where !remoteGame.Players.Intersect(localPlayers).Any()
                              select remoteGame;

3:

ParseQuery<ParseGame> query = from remoteGame in new ParseQuery<ParseGame>()
                              where !remoteGame.Players.Contains(localPlayers[0])
                              where !remoteGame.Players.Contains(localPlayers[1])
                              where !remoteGame.Players.Contains(localPlayers[2])
                              where !remoteGame.Players.Contains(localPlayers[3])
                              select remoteGame;

选项1和2给出一个例外,即不支持查询,而选项3给出一个例外,即查询不能对一个键有多个约束。

感谢你的帮助, HIG

2 个答案:

答案 0 :(得分:1)

我认为这是你正在寻找的东西:

remoteGame.Players.Except(localPlayers)

答案 1 :(得分:0)

经过多次尝试,我找到了解决方案。我认为parse.com上的文档不太对。它说:

  

如果要检索与多个值中的任何一个都不匹配的对象,可以使用WhereNotContainedIn或者!包含LINQ查询,提供可接受值的列表。

但实际上,您无法在!包含Linq查询中提供可接受值的列表,而是单个值,而您可以使用WhereNotContainedIn提供可接受值的列表。

所以解决方案看起来像这样:

ParseQuery<ParseGame> query = from remoteGame in new ParseQuery<ParseGame>()
                              select remoteGame;
query = query.WhereNotContainedIn("Players", localPlayers);