我正在尝试查询MongoDB以获得前5000个记录,这会导致以下错误。 我使用的是C#LINQ驱动程序,而TermMonitorIds是一个BsonArray。
{“无法确定表达式的序列化信息:x.ToString()。”}
public IList<SocialRecord> GetManyBetweenDatesLimited(List<string> termMonitorIds, string[] sources, DateTime fr, DateTime to)
{
IList<SocialRecord> entities = new List<SocialRecord>();
try
{
entities =
(from e in this.collection.AsQueryable<SocialRecord>()
where (e.TermMonitorIds.Any(x => termMonitorIds.Contains(x.ToString()))) && (sources.Contains(e.SocialType))
&& (e.DateCreated.Date >= fr.Date) && (e.DateCreated.Date <= to.Date)
select e)
.Take(5000)
.ToList();
}
catch (Exception ex)
{
Log.Error("Error Message", ex);
}
return entities;
}
我尝试将List更改为BsonArray,如下所示:
BsonArray bArray = new BsonArray();
foreach (var term in termMonitorIds )
{
bArray.Add(term.ToBson());
}
最终还是会出现如下错误消息:
>应用程序中的服务器错误。无法将字符串值写入BSON文档的根级别。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:无法将String值写入BSON文档的根级别。
答案 0 :(得分:4)
LINQ提供商不支持ToString
,因为它不知道如何将其翻译为MongoDB表达式。
我建议您更新termMonitorIds
以匹配e.TermMonitorIds
返回的预期数据类型,例如List<int>
/ List<Guid>
,无需进行任何转换(如果没有它,通常效率更高)。