gpt4 book ai didi

odata - 带有日期时间过滤器的 Tridion OData 查询 - 错误 : datetime is not property of Entity

转载 作者:行者123 更新时间:2023-12-04 07:25:19 26 4
gpt4 key购买 nike

我正在尝试使用 .net 客户端查询 OData 以获取特定日期时间内的上次发布组件。它总是失败并出现异常 'datetime' is not property of entity: 'com.tridion.storage.ComponentMeta'

var lastPubComponents = _client.Components
.Where(p => p.PublicationId == sitePubId && p.LastPublishDate > Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss")))
.ToList();

当我检查构造的 Odata URL 时,它看起来如下所示,我尝试使用来自浏览器的相同 URL 只是为了仔细检查我得到了与预期相同的错误。

我尝试使用 LINQ 时的 Odata URL
/cd_webservice/odata.svc/Components?$filter=PublicationId eq 59 and LastPublishDate ge datetime'2012-10-11T09:22:14'

我尝试删除 datetime来自上述 URL 的字符串并再次从浏览器中检查。此 URL 按预期工作,我得到了正确的结果。

以下是 URL(工作不带日期时间)
/cd_webservice/odata.svc/Components?$filter=PublicationId eq 59 and LastPublishDate ge '2012-10-11T09:22:14'

这种让我认为 LINQ 和/或 .net 客户端组合有问题。

我尝试使用不同的日期时间格式组合,但出现相同的错误。当我检查 Odata 标准时,建议使用 datetime字符串,但这是我遇到的问题。

有人知道如何从 LINQ 代码调试/解决这个问题吗?任何帮助将不胜感激。

最佳答案

OData 规范确实提到了在 http://www.odata.org/documentation/overview#AbstractTypeSystem 中使用“LastPublishDate ge datetime'2012-10-11T09:22:14'”之类的结构进行查询的可能性。但这并没有在产品中实现。但是,产品中包含 OData 规范允许的用于过滤的日期方法 ( http://www.odata.org/documentation/uri-conventions#FilterSystemQueryOption )。它们是 day()、hour()、minute()、month()、second() 和 year(),这基本上转化为你的噩梦查询:

DateTime timeNow = DateTime.Now;
int yearNow = timeNow.Year;
int monthNow = timeNow.Month;
int dayNow = timeNow.Day;
int hourNow = timeNow.Hour;
int minuteNow = timeNow.Minute;
int secondNow = timeNow.Second;
var lastPubComponents = service.Components
.Where(p => p.PublicationId == 3 &&
(p.LastPublishDate.Value.Year > yearNow ||
(p.LastPublishDate.Value.Year == yearNow && p.LastPublishDate.Value.Month > monthNow) ||
(p.LastPublishDate.Value.Year == yearNow && p.LastPublishDate.Value.Month == monthNow && p.LastPublishDate.Value.Day > dayNow) ||
(p.LastPublishDate.Value.Year == yearNow && p.LastPublishDate.Value.Month == monthNow && p.LastPublishDate.Value.Day == dayNow && p.LastPublishDate.Value.Hour > hourNow) ||
(p.LastPublishDate.Value.Year == yearNow && p.LastPublishDate.Value.Month == monthNow && p.LastPublishDate.Value.Day == dayNow && p.LastPublishDate.Value.Hour == hourNow && p.LastPublishDate.Value.Minute > minuteNow) ||
(p.LastPublishDate.Value.Year == yearNow && p.LastPublishDate.Value.Month == monthNow && p.LastPublishDate.Value.Day == dayNow && p.LastPublishDate.Value.Hour == hourNow && p.LastPublishDate.Value.Minute == minuteNow && p.LastPublishDate.Value.Second > secondNow)
)
)
.ToList();

希望这可以帮助。

问候,
丹尼尔。

关于odata - 带有日期时间过滤器的 Tridion OData 查询 - 错误 : datetime is not property of Entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12865376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com