Linq查询包含List中的List

时间:2014-06-16 14:22:57

标签: c# linq

我正在尝试查询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文档的根级别。

1 个答案:

答案 0 :(得分:4)

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

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