首页 > 解决方案 > Linq 查询获取两个日期之间的数据

问题描述

日期和时间保存为:1397/06/10 13:55:49

Linq查询是:

var showFamily = (from b in database.tbl_kharidnaghdi

                          join u in database.tbl_Customer on b.CustomerID_FK equals u.CustomerID
                          join c in database.tbl_User on u.UserID_FK equals c.UserID
                          orderby b.KharidnaghdiID descending

                          where u.UserID_FK == userid
                            && txtFamily.Text.Contains(u.Family)
                            &&string.Compare(b.Date, txtDate1.Text) <= 0  
                            && string.Compare(b.Date, txtDate2.Text) >= 0
                          select new
                          {
                              u.Name,
                              u.Family,
                              u.Mobile,
                              u.Price,
                              u.CustomerID,
                              b.KharidnaghdiID,
                              b.EtebarHadiye,
                              b.Cashier,
                              b.Date,
                          }).ToList();
        grdShowListUser.DataSourceID = null;
        grdShowListUser.DataSource = showFamily;

我认为日期应该像这样与时钟分开:1397/06/10

标签: c#asp.netlinq

解决方案


由于您要比较日期值,因此有必要使用来自文本框属性(即属性)的DateTime.ParseExact()方法转换它们并使用它们之间进行比较:TextstringCompareTo()

DateTime date1 = DateTime.ParseExact(txtDate1.Text, "yyyy/MM/dd hh:mm:ss", CultureInfo.InvariantCulture);
DateTime date2 = DateTime.ParseExact(txtDate2.Text, "yyyy/MM/dd hh:mm:ss", CultureInfo.InvariantCulture);

var showFamily = (from b in database.tbl_kharidnaghdi
                  join u in database.tbl_Customer on b.CustomerID_FK equals u.CustomerID
                  join c in database.tbl_User on u.UserID_FK equals c.UserID
                  orderby b.KharidnaghdiID descending
                  where u.UserID_FK == userid
                  && txtFamily.Text.Contains(u.Family)
                  && b.Date.CompareTo(date1.Date) <= 0 // date comparison here
                  && b.Date.CompareTo(date2.Date) >= 0
                  select new
                  {
                      u.Name,
                      u.Family,
                      u.Mobile,
                      u.Price,
                      u.CustomerID,
                      b.KharidnaghdiID,
                      b.EtebarHadiye,
                      b.Cashier,
                      b.Date,
                  }).ToList();

请注意,如果您使用的是 LINQ to Entities,则该Date属性可能不受支持,您可以将其使用DbFunctions.TruncateTime()或投影到 LINQ to ObjectsToList()AsEnumerable()作为替代方案。


推荐阅读