从 linq to sql 日期之间 return 结果的正确方法
Correct way to return results from linq to sql between dates
我的查询有点问题。
我有两个日期时间文本框和一个搜索按钮。
当我搜索时,假设从 12/08/2021 到 12/08/2021 它 return 只有一个日期为 2021-08-12 00:00:00.000 的结果,因为时间在其他发票上是 2021-08-12 17:38:55.740
我的代码是:
SearchInvoicesNotSendToMydata(fromDateEdit.DateTime, toDateEdit.DateTime);
public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
List<Invoices> invoices = db.Invoices
.Where(p => (p.Date >= fromDate && p.Date <= toDate));
return invoices;
}
两个变量都有值
fromDate =12/8/2021 12:00:00
toDate = 12/8/2021 12:43:21
我知道 return 其他发票因为时间的关系,我只是想知道是否有一种优雅的方法来 return 从日期 0:00:00 到23:59:59
*在图像中 Imerominia = 日期
您可以快速完成类似的操作。所以它只会检查和比较日期而不是时间。
public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
List<Invoices> invoices = db.Invoices.Where(p => (p.Date.Date >= fromDate.Date && p.Date.Date <= toDate.Date));
return invoices;
}
编辑
新信息导致更正
DateTime
class return 的 Date
成员是一个新的 DateTime
实例,TimeOfDay
属性设置为 00:00:00。它不是 return 不包含时间信息的新类型。
例如:
DateTime.Now.TimeOfDay // is 11:26:34.1234567
DateTime.Now.Date.TimeOfDay // is 00:00:00
所以你可以按照@AsifRahman 的回答,或者使用我原来回答的原则来实现你需要的。
@AsifRahman 解决方案基于将 TimeOfDay
属性 设置为 00:00:00 在您将用于比较的所有 DateTime
实例中。这可以通过在所有涉及的 DateTime
个实例上使用 Date
属性 轻松完成。
请注意,此解决方案使用包含的上限
p.Date.Date <= toDate.Date
,从清晰度的角度来看,这可能并不理想:后续间隔似乎重叠,但实际上并非如此。
另一个解决方案是使用独占上限并在 toDate.Date
值上增加一天。
SearchInvoicesNotSendToMydata(fromDateEdit.DateTime, toDateEdit.DateTime);
public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
List<Invoices> invoices = db.Invoices.Where(p => (p.Date >= fromDate.Date && p.Date < toDate.Date.AddDay(1)));
return invoices;
}
这样做的好处是更加清晰(没有重叠的后续间隔)。
感谢您的回答。
我找到了怎么做。
我只是用
addDays 和 addMilliseonds 以获得正确的日期。
这是任何需要它的人的代码。
public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
List<Invoices> invoices = db.Invoices
.Where(p => (p.Date >= fromDate.Date
&& p.Date <= toDate.Date.AddDays(1).AddMilliseconds(-1)));
return invoices;
}
我的查询有点问题。
我有两个日期时间文本框和一个搜索按钮。
当我搜索时,假设从 12/08/2021 到 12/08/2021 它 return 只有一个日期为 2021-08-12 00:00:00.000 的结果,因为时间在其他发票上是 2021-08-12 17:38:55.740
我的代码是:
SearchInvoicesNotSendToMydata(fromDateEdit.DateTime, toDateEdit.DateTime);
public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
List<Invoices> invoices = db.Invoices
.Where(p => (p.Date >= fromDate && p.Date <= toDate));
return invoices;
}
两个变量都有值
fromDate =12/8/2021 12:00:00
toDate = 12/8/2021 12:43:21
我知道 return 其他发票因为时间的关系,我只是想知道是否有一种优雅的方法来 return 从日期 0:00:00 到23:59:59
*在图像中 Imerominia = 日期
您可以快速完成类似的操作。所以它只会检查和比较日期而不是时间。
public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
List<Invoices> invoices = db.Invoices.Where(p => (p.Date.Date >= fromDate.Date && p.Date.Date <= toDate.Date));
return invoices;
}
编辑
新信息导致更正
DateTime
class return 的 Date
成员是一个新的 DateTime
实例,TimeOfDay
属性设置为 00:00:00。它不是 return 不包含时间信息的新类型。
例如:
DateTime.Now.TimeOfDay // is 11:26:34.1234567
DateTime.Now.Date.TimeOfDay // is 00:00:00
所以你可以按照@AsifRahman 的回答,或者使用我原来回答的原则来实现你需要的。
@AsifRahman 解决方案基于将 TimeOfDay
属性 设置为 00:00:00 在您将用于比较的所有 DateTime
实例中。这可以通过在所有涉及的 DateTime
个实例上使用 Date
属性 轻松完成。
请注意,此解决方案使用包含的上限
p.Date.Date <= toDate.Date
,从清晰度的角度来看,这可能并不理想:后续间隔似乎重叠,但实际上并非如此。
另一个解决方案是使用独占上限并在 toDate.Date
值上增加一天。
SearchInvoicesNotSendToMydata(fromDateEdit.DateTime, toDateEdit.DateTime);
public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
List<Invoices> invoices = db.Invoices.Where(p => (p.Date >= fromDate.Date && p.Date < toDate.Date.AddDay(1)));
return invoices;
}
这样做的好处是更加清晰(没有重叠的后续间隔)。
感谢您的回答。 我找到了怎么做。 我只是用 addDays 和 addMilliseonds 以获得正确的日期。 这是任何需要它的人的代码。
public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
List<Invoices> invoices = db.Invoices
.Where(p => (p.Date >= fromDate.Date
&& p.Date <= toDate.Date.AddDays(1).AddMilliseconds(-1)));
return invoices;
}