LoadSelect创建意外查询

时间:2019-04-19 10:34:08

标签: ormlite-servicestack

我正在尝试通过LoadSelect加载具有引用的对象的日期过滤列表。但是,生成查询以加载引用时,查询结构不正确,并且我收到“从字符串转换日期和/或时间时转换失败”。错误

这是POCO课

[Alias("Users")]
 public class User
    {
        public Guid Id { get; set; }
        public string Name{ get; set; }
        public DateTimeOffset CreatedDate { get; set; }
        public DateTimeOffset ModifiedDate { get; set; }
        public DateTimeOffset CompletedDate { get; set; }

        [Reference]
        public Account Account { get; set; }

        [References(typeof(Account))]
        public Guid AccountId { get; set; }
    }

[Alias("Accounts")]
public class Account
    {
        public Guid Id { get; set; }
        public string Title { get; set; }   
    }

通过以下查询

var query = db.From<User>()
    .Where(x => x.CreatedDate > fromDate)
    .And(x => x.CreatedDate < toDate);

var result = db.LoadSelect(query);

方言为SqlServer2016Dialect,日期字段为datetimeoffset(7)

这将产生以下sql查询

exec sp_executesql N'SELECT "Id", "Name", "CreatedDate", "ModifiedDate", "CompletedDate", "AccountId" 
FROM "Users"
WHERE ("CreatedDate" > @0) AND ("CreatedDate" < @1)',N'@0 datetimeoffset(7),@1 datetimeoffset(7)',@0='2017-08-27 00:00:00 +10:00',@1='2019-04-19 23:59:59 +10:00'

这是试图加载引用的查询

exec sp_executesql N'SELECT "Id", "Title" FROM "Accounts" WHERE "Id" IN (SELECT "Users"."AccountId" 
FROM "Users"
WHERE ("CreatedDate" > ''27/08/2017 00:00:00 +10:00'') AND ("CreatedDate" < ''19/04/2019 23:59:59 +10:00''))',N'@0 datetimeoffset(7),@1 datetimeoffset(7)',@0='2017-08-27 00:00:00 +10:00',@1='2019-04-19 23:59:59 +10:00'

运行此查询将导致“从字符串转换日期和/或时间时转换失败。”

如果我从该查询中取消了where命令,它将按预期工作。

任何帮助都将不胜感激!

0 个答案:

没有答案