我正在使用C#MongoDB驱动程序版本2.1.0,并且遇到以下问题:我有一个静态类来处理数据库连接等,我公开了如下属性,
public static class StaticMongo {
private readonly static MongoClient Client;
private readonly static IMongoDatabase Database;
public static IMongoQueryable<Game> GetGames {
get {
return Database.GetCollection<Game>("Games").AsQueryable();
}
}
// ...
}
每个Game
都有一个Player
列表,其中包含Name
属性(以及更多,ofc)。访问数据时,例如,从Player
获取名为_name
的所有Games
个实例,以下作品:
var a = StaticMongo.GetHands.
Where(n => (int)n.GameType == i).
//Where(n => GamePassesFilter(n, true)).
SelectMany(n => n.Players).
Where(n => n.Name == _name).ToList();
但如果我还想过滤它们(即,如果我包含注释行),就像这样,
private bool GamePassesFilter(Game _game, bool _manyAllowed) {
var _playersInGame = _game.Players.Count();
if (_manyAllowed && (_playersInGame == 5 ||_playersInGame == 6)) return true;
return false;
}
我得到一个例外。为什么?如何正确处理?
在System.ArgumentException中,请使用Ausnahme vom Typ “MongoDB.Driver.dll”aufgetreten,doch wurde diese im Benutzercode nicht verarbeitet。
ZusätzlicheInformationen:不支持的过滤器: 值(MGM8.ViewModels.PlayersViewModel).GamePassesFilter([文件])。
答案 0 :(得分:0)
FilterDefinition
方法中的用户功能无法转换为驱动程序PredicateTranslator
中的GamePassesFilter
。
如果您被允许这样做,可以在此之前致电AsEnumerable()
使用StaticMongo.GetHands.AsEnumerable().Where(n => GamePassesFilter(n, true))...
:
StaticMongo.GetHands.Where(n => n.Players.Count() == 5 || n.Players.Count() == 6 && _manyAllowed)...
或者,您可以在查询中写下所有条件。
{{1}}