执行此代码时出现异常:
List<TenantSelectorDto> foundSelectors = null;
//.....
foundSelectors = tenants
.Where(filter)
.Select(ts => new TenantSelectorDto
{
Id = ts.Id.ToString(),
Name = ts.Name,
ShortName = ts.ShortName,
TenantCode = ts.TenantCode,
})
.ToList();
例外是:
NotSupportedException, Message: ToString of type System.Object is not supported in the expression tree {document}{_id}.ToString().
Id
定义为字符串,而Id
对象的Tenant
是MongoDB ObjectId
。 DTO是REST API的一部分,我不希望强制消费者仅仅因为数据类型ObjectId
而链接到整个MongoDB驱动程序库。
这是一个错误还是为什么.ToString在投影中使用时不起作用?
答案 0 :(得分:0)
似乎是一个LINQ问题!我没有使用LINQ,而是尝试使用聚合框架,它在这里按预期工作!
var filterDefinition = Builders<Tenant>.Filter.Where(<Build whatever filter you need here>);
var foundSelectors = tenantCollection
.Find(filterDefinition)
.Project(ts => new TenantSelectorDto
{
Id = ts.Id.ToString(),
Name = ts.Name,
ShortName = ts.ShortName,
TenantCode = ts.TenantCode,
})
.ToList();
技巧没有例外!
不知道这是一般的LINQ问题还是MongoDB LINQ实现的问题。