gpt4 book ai didi

c# - 使用 FilterDefinition 过滤集合中的类型

转载 作者:行者123 更新时间:2023-11-30 16:52:18 25 4
gpt4 key购买 nike

当我尝试按类型/鉴别器过滤记录时,驱动程序提示:

var types = new List<Type> { typeof (ConcreteClassA), typeof (ConcreteClassB) };
query &= Builders<AbstractClass>.Filter.Where (obj => types.Any (type => obj.GetType ().IsInstanceOfType (type)));

value(System.Collections.Generic.List`1[System.Type]) is not supported.

即使我尝试与一种类型进行比较,我也会遇到异常:

query &= Builders<AbstractClass>.Filter.Where (obj => obj.GetType ().IsInstanceOfType (typeof (ConcreteClassA));

我知道在 1.x 驱动程序中我可以使用 OfType<ConcreteClassA>()解决方案。使用FilterDefinition时是否有类似的方法? ?

最佳答案

我建议您使用 OfType,如下所示,它将为您提供 FilterDefinition:

var filterTypeA = Builders<AbstractClass>.Filter.OfType<ConcreteClassA>();
var filterTypeB = Builders<AbstractClass>.Filter.OfType<ConcreteClassB>();
var filter = Builders<AbstractClass>.Filter.Or(filterA, filterB);

var result = collection.Find(filter).ToListAsync().Result;

但您也可以像下面这样使用 is 运算符:

var filter = Builders<AbstractClass>.Filter
.Where(w=> w is ConcreteClassA || w is ConcreteClassB);

关于c# - 使用 FilterDefinition 过滤集合中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32723954/

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