【发布时间】:2013-07-01 23:06:43
【问题描述】:
当我尝试运行以下形式的 LINQ 查询时:
MongoCollection<MyEntity> collection;
collection.AsQueryable().Where(entity =>
(entity.Flags & MyFlags.AFlag) != MyFlags.None);
我收到ArgumentException 和消息Unsupported where clause: ((Int32)((Int32)entity.Flags & 4) != 0).
这是一个已知的错误/功能吗?
有什么解决办法吗?
从documentation 看来,MongoDB 有按位更新,但没有按位查询。
作为对比,同样的查询在使用 ServiceStack 作为客户端的 Redis 上运行流畅。
我确实找到了这两个链接(link1,link2),它们建议使用 JavaScript,但是,这会使服务层的实现非常依赖于 DB 技术。
【问题讨论】:
-
也许你可以尝试使用 linq 来反对查询:collection.AsQueryable().ToList().Where(entity => (entity.Flags & MyFlags.AFlag) != MyFlags.None);
-
这会将所有对象反序列化到内存中。我可以在其他过滤器之后使用它(假设它们减少了足够的记录)。
-
@Tim.Tang 这适用于我的查询,因为我有其他条件可以事先过滤。还注意到 GroupBy() 失败,需要移到 .ToList() 之后。将此作为答案发布,我会接受。
标签: c# linq mongodb mongodb-.net-driver bitwise-operators