You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB C#环境下Linq FilterBuilder的IN过滤器不接受Lambda报错如何解决

问题根因

你遇到的CS1660编译错误本质是参数类型不匹配导致的:MongoDB .NET驱动的Filter.In泛型方法要求,第二个入参必须是和第一个lambda表达式返回的字段类型一致的集合,你原代码里第一个lambda取的是Boletin类的_id字段,第二个参数却传了List<Boletin>类型的对象列表,类型不匹配,编译器无法把lambda表达式识别为合法的字段选择委托,因此抛出错误。

修复方案

你只需要先提取待删除条目的_id集合,再传入In方法即可,修正后的完整代码如下:

// 从POST请求读取待删除条目列表
string jsonBoletines = await new StreamReader(req.Body).ReadToEndAsync();

// 将JSON反序列化为Boletin对象列表
List<Boletin> boletinesToDelete = JsonConvert.DeserializeObject<List<Boletin>>(jsonBoletines);

// 提取所有待删除条目的_id集合
var deleteIdList = boletinesToDelete.Select(item => item._id).ToList();

// 构造In查询过滤器
var filter = Builders<Boletin>.Filter.In(item => item._id, deleteIdList);

// 执行批量删除,异步场景建议改用DeleteManyAsync
var results = collection.DeleteMany(filter);
补充说明

如果你的_id字段是MongoDB默认的ObjectId类型,需要确保反序列化时JSON里的id字符串能正确转换为ObjectId,可以在Boletin类的_id属性上添加[BsonId]、[BsonRepresentation(BsonType.ObjectId)]特性避免序列化异常。


内容的提问来源于stack exchange,提问作者Dreyser Eguia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:48:03