Linq查询,其中包含列表中的列表

本文关键字:列表 包含 查询 Linq | 更新日期: 2023-09-27 18:08:53

我试图查询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());
            }

仍然以错误消息结束:

'/'应用程序出现服务器错误。

String值不能写入BSON文档的根级别

描述:当前web请求执行过程中出现未处理的异常。请查看堆栈跟踪以获得有关错误及其在代码中的起源位置的更多信息。

Exception Details: System。InvalidOperationException:字符串值不能写入BSON文档的根级别

Linq查询,其中包含列表中的列表

LINQ提供程序不支持ToString,因为它不知道如何将其翻译为MongoDB表达式。

我建议您更新termMonitorIds以匹配e.TermMonitorIds返回的预期数据类型,例如List<int>/List<Guid>,避免需要任何类型的转换(没有它通常更有效)。