我正在尝试获取开始日期在特定范围内的所有记录。我的查询仅在使用.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