You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Realm .NET SDK中查询DateTimeOffset类型的日期属性

问题

我的Realm模型包含一个DateTimeOffset类型的Date属性,定义如下:

public class Log : RealmObject
{
    // 省略其他代码
    public DateTimeOffset Date { get; set; }
}

我想获取所有属于特定日期的对象,最初尝试用Linq查询:

.All<Log>().Where(x => x.Date.DayOfYear == DateTimeOffset.Now.DayOfYear);

但Realm抛出错误:

The left-hand side of the Equal operator must be a direct access to a persisted property in Realm.
Unable to process 'x.Date.DayOfYear'

原因是Linq不支持嵌套属性查询。之后我尝试用Realm查询语言(RQL)实现:

.All<Log>().Filter("Date.DayOfYear == $0", DateTimeOffset.UtcNow.DayOfYear).FirstOrDefault();

同样抛出异常:

Property 'Log.Date' is not an object reference

请问该如何完成这个查询任务?

解决方案

Realm不支持直接对日期的DayOfYear这类嵌套属性做查询,但可以通过构造日期范围来实现需求:

  • 先计算目标日期的起始时间(当天0点0分0秒)和结束时间(次日0点0分0秒)
  • 用Date >= 起始时间且Date < 结束时间的范围条件过滤数据

示例代码如下:

// 获取当前日期的起始和结束边界
var today = DateTimeOffset.Now.Date;
var startOfDay = today;
var endOfDay = today.AddDays(1);

// 查询当天所有Log记录
var todayLogs = realm.All<Log>()
                     .Where(x => x.Date >= startOfDay && x.Date < endOfDay)
                     .ToList();

如果要基于UTC时间查询(避免时区偏差问题),可以调整为:

var todayUtc = DateTimeOffset.UtcNow.Date;
var startOfDayUtc = todayUtc;
var endOfDayUtc = todayUtc.AddDays(1);

var todayLogsUtc = realm.All<Log>()
                        .Where(x => x.Date >= startOfDayUtc && x.Date < endOfDayUtc)
                        .ToList();

这种方法利用Realm支持的直接属性比较,既能避开嵌套属性的限制,又能准确过滤出指定日期的所有记录;如果给Date字段添加索引,还能进一步提升查询效率。

内容的提问来源于stack exchange,提问作者Sev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:52:37