gpt4 book ai didi

c# - 在 MongoDB 的组聚合中动态添加匹配运算符

转载 作者:可可西里 更新时间:2023-11-01 09:16:16 26 4
gpt4 key购买 nike

我正在使用 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 '...

如何实现这样的目标?

最佳答案

问题是 query 的类型是IAggregateFluent<T1> (其中 T1 是您的文档类型),但是 .Group() 的返回类型方法是 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 的结果新变量的函数:

var grouped = query.Group(
key => key.Id,
g => new
{
Id = g.Key
}).ToList();

希望这对您有所帮助。

关于c# - 在 MongoDB 的组聚合中动态添加匹配运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com