使用ToList()时,LINQ中的Cosmos DB查询DateTime有效,但使用IQueryable时则无效

时间:2019-12-20 19:35:15

标签: c# azure linq json.net cosmos

我正在尝试获取开始日期在特定范围内的所有记录。我的查询仅在使用.ToList()时返回结果。

我的课堂示例:

    public class TestEvent
    {

    }

    public class TestEvent : EntityBase
    {
        public TestEvent()
        {

        }


        [JsonProperty("dates")]
        public List<DateRange> Dates
        {
            get;set;
        }
    }

    public class DateRange
    {
        [JsonProperty("startDate")]
        public DateTime StartDate
        {
            get; set;
        }

        [JsonProperty("endDate")]
        public DateTime EndDate
        {
            get; set;
        }
    }

我获取记录的代码:

    var pQuery = Entities<TestEvent>().Where(x => x.Dates.Any(d => d.StartDate < DateTime.Now));

    foreach (var pEvent in pQuery)
        {
            Page.Response.Write(pEvent.Name + "<br/>");

            foreach (DateRange pRange in pEvent.Dates)
            {
                Page.Response.Write(pRange.StartDate + "<br/>");
            }
        }

仅在首先在数据源上调用 ToList()时,代码才返回值...

此行有效:

var pQuery = Entities<TestEvent>()**.ToList()**.Where(x => x.Dates.Any(d => d.StartDate < DateTime.Now));

,而这个没有:

var pQuery = Entities<TestEvent>().Where(x => x.Dates.Any(d => d.StartDate < DateTime.Now));

任何人都可以帮助我理解为什么第二通电话没有产生任何结果吗?也许可以帮助我使此工作正常,而不必先使用ToList()加载所有记录? 据微软称,应该。 https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/11503872-support-linq-any-or-where-for-child-object-collect

第一次调用(ToList())首先将它们全部加载到内存中并可以正常工作,但这对生产不利。

我正在使用Cosmos V3最新版本。 集合中有数据。 (当我排除“ Where”语句时正确加载) 任何帮助将不胜感激。

这是查询ToString()的输出:

  

{“ query”:“从根联接中选择值根(选择值存在(从根联接中选择值d0,在根[\”日期\“]中从根联接d0中选择(d0 [\” startDate \“] <\” 2019 -12-20T16:06:14.197226-06:00 \“))))AS v0 WHERE v0”}

我也在cosmos数据浏览器中尝试了此操作,但没有结果也没有错误:

  

JOIN(选择值存在(从c中选择值d0,在c [“ dates”]中加入c [d0 [“ startDate”]> =“ 2019-12-20T16:25:44.9759932-06:00”) AND(d0 [“ endDate”]>“ 2019-12-20T16:25:44.9759932-06:00”)))))AS v0 WHERE v0

0 个答案:

没有答案