如何在DateRange之间选择pass-in-Date

时间:2013-12-24 02:08:16

标签: sqlite windows-phone-8 winrt-xaml

我有一个包含DateTime字段的表格如下:

 class ItemSales
    {
        [PrimaryKey, AutoIncrement]
        public int SpId { get; set; }

        public string CompanyName { get; set; }
        public string ItemNo { get; set; }     
        public DateTime StartDate { get; set; }
        public decimal UnitPrice { get; set; }
        public decimal MinimumQuantity { get; set; }
        public DateTime EndDate { get; set; }       
        public decimal Cost { get; set; }      
        public DateTime InsertDate { get; set; }

       ---- others
    }

---
其他

问题:

如何查询我需要检查传入字符串日期strCurrentDate(DateTime.Now)是否在表中的StartDate和EndDate之间?

如果我将当前日期作为yyyy-mm-dd传递,并且我具有以下功能:

---更新

错误消息:

运营商'>'不能应用于'string'和'System.DateTime'

类型的操作数


 private async void GetActualPrice(string Cpy, string No, string strCurrentDate,string strSelectedUoM)
 {
  var db = new SQLiteAsyncConnection(dbPath);

var Items = await db.Table < ItemSales >().Where(x => x.CompanyName == Cpy && x.ItemNo == No && strCurrentDate > x.StarDate && strCurrentDate < x.EndDate).ToListAsync();



 foreach (var _line in Items)
 {

  }                 
}



No need to convert the Start and End Date into string ??? 

 "'" + strCurrentDate + "'" + " BETWEEN StartDate And EndDate");



2 个答案:

答案 0 :(得分:0)

按“当前日期”,是指将查询提交到数据库的时间?您可以将当前日期格式化为查询中的常量,例如: 此外,您需要通过以下方式为查询响应提供数据类型:

List<String> Items = await db.QueryAsync( ...

var Items = await db.QueryAsync<List<String>>( ...

然后

    "Select * From ItemSales Where CompanyName ='" + Cpy + "' AND ItemNo ='" + No + "' AND '" + DateTime.UtcNow.ToString("yyyy/M/d") + "' BETWEEN StartDate and EndDate");

日期将形成2013/12/23。我假设您的数据库中的日期是GMT。

(编辑:将string.format()更改为字符串连接...) (编辑:根据提供的错误消息,需要告诉C#.QueryAsync()返回的数据类型.SQL查询语法可能也有问题,但在数据类型声明修复之前我们不会找到它。)

答案 1 :(得分:0)

Sqlite仅比较日期为yyyy-MM-dd HH:mm:ss格式的日期。因此,当您在sqlite db中插入datetime时,请以yyyy-MM-dd格式插入以作为后续查询的字符串类型。

var Items = await db.QueryAsync("Select * From ItemSales Where CompanyName ='" + Cpy + "'" + " AND ItemNo ='" + No + "'" +
" AND " + "'" + strCurrentDate + "'" + " BETWEEN StartDate And EndDate");

另一种方法是你只需使用linq查询来比较日期。这是linq查询

var Items = await db.Table<ItemSales>().Where(x=>x.CompanyName ==cpy && x.ItemNo ==No && x.strCurrentDate >StartDate && x.strCurrentDate <EndDate).ToList();