我在我的网络应用程序中使用MongoDB C# driver 2.4.4
。我需要将文档分组到一个动态过滤它们的集合中。
var query = collection.Aggregate()
.Match(y => y.IdLower.Contains(id))
.Match(y => y.NameLower.Contains(name))
.Group(
key => key.Id,
g => new
{
Id = g.Key
}).ToList();
我需要根据用户输入添加或删除Match
运算符,但我无法确定如何。
我试过这样的事情:
var query = collection.Aggregate();
if(!string.IsNullOrWhiteSpace(id))
query = query.Match(y => y.IdLower.Contains(id));
if (!string.IsNullOrWhiteSpace(name))
query = query.Match(y => y.NameLower.Contains(name));
query = query.Group(
key => key.Id,
g => new
{
Id = g.Key
}).ToList();
但我收到语法错误Cannot imlicitly convert type System.Collection.Generic.List<<anonymous type: string Id>> to '...
如何实现这样的目标?
答案 0 :(得分:0)
问题是query
的类型是IAggregateFluent<T1>
(其中T1
是您的文档类型),但.Group()
方法的返回类型是{{1 (IAggregateFluent<T2>
是匿名类型)。编译器不知道如何隐式转换这些类型,因此错误。
这取决于您在此处尝试做什么,但解决此问题的一种可能方法是从组表达式返回T2
(您的文档类型)的实例:
T1
另一种选择是将query = query.Group(
key => key.Id,
g => new T1 // replace "T1" with the actual name of your class
{
Id = g.Key
}).ToList();
函数的结果分配给一个新变量:
group
希望这有帮助。