【问题标题】:Subsonic: The member 'Days' is not supportedSubsonic:不支持成员“Days”
【发布时间】:2009-12-30 06:18:08
【问题描述】:

我正在使用 Subsonic (SimpleRepository) 来查询我的 SQL 2008 数据库。我正在尝试编写一个查询,该查询将计算两个字段之间的天数并返回差异小于给定数字的记录。但是,我收到“不支持成员 'Days'”错误。

有人可以提出替代查询吗?

这是我要运行的查询:

var repository = new SimpleRepository("MyConnection", 
                              SimpleRepositoryOptions.None);
var query = (from c in repository.All<Data.Customer>()
            where c.LastSynchronizedOn == null || 
                  (c.LastSynchronizedOn - c.CreatedOn).Days <= 7)
            select c).Distinct();

编辑:

我试过了:

(c.LastSynchronizedOn == null || (c.LastSynchronizedOn.Value - c.CreatedOn).Days <= 7)

我遇到同样的异常:不支持成员“Days”

我也试过了:

(c.LastSynchronizedOn == null || ((c.LastSynchronizedOn - c.CreatedOn) > new TimeSpan(7, 0, 0, 0)))

我得到:无法将参数值从 TimeSpan 转换为字符串。

【问题讨论】:

    标签: subsonic


    【解决方案1】:

    请检查字段 LastSynchronizedOnCreatedOn 的数据类型,因为问题与 SubSonic 无关,但 .Net 抱怨(如果这是正确的表达方式)因为表达式 (c.LastSynchronizedOn - c.CreatedOn) 可能不会返回DateTime 对象。

    编辑:- 根据您的评论,请尝试此操作

    (c.LastSynchronizedOn.Value - c.CreatedOn).Days
    

    编辑(2):语句

    (c.LastSynchronizedOn == null || 
      ((c.LastSynchronizedOn - c.CreatedOn) > new TimeSpan(7, 0, 0, 0)))
    

    返回布尔值(真或假)

    试试这个:

    var repository = new SimpleRepository("MyConnection", 
                              SimpleRepositoryOptions.None);
    var query = (from c in repository.All<Data.Customer>()
     where ((c.LastSynchronizedOn ?? 
                  new DateTime(c.CreatedOn.Year, c.CreatedOn.Month, 
                              c.CreatedOn.Day).AddDays(-7)) 
         - c.CreatedOn).Days <= 7) select c).Distinct(); 
    

    【讨论】:

    • LastSynchronizedOn 是日期时间吗? CreatedOn 是 DateTime
    • 我认为 Subsonic 抛出错误而不是 .NET 的原因是因为异常的“来源”是“Subsonic.Core”
    • ...而且堆栈跟踪顶部的条目是“在 SubSonic.Linq.Structure.TSqlFormatter.VisitMemberAccess(MemberExpression m)”
    • 您的建议会产生相同的错误。我实际上查看了 Subsonic 3.0.3 中 TSqlFormatter.cs 中的 VisitMemberAccess 方法的源代码,我在第 216 行看到了抛出 NotSupportedException 的地方。这就是为什么我正在寻找另一种方式来编写我的 Linq 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多