C# 如何处理linq比较中没有日期的datetime?

C# 如何处理linq比较中没有日期的datetime?,c#,entity-framework,linq,C#,Entity Framework,Linq,我有两个日期作为字符串,如下所示: Beginning month: 10 Beginning year: 2010 Ending month: 01 Ending Year 2020 我想查询我的实体,并得到所有相等或介于这些范围之间的内容 所以,我想要从2010年10月到2020年1月的一切 我有这段代码,我被困在如何正确转换日期和比较: dollartotals = (from x in se.AchBatches where x.CompanyCode ==

我有两个日期作为字符串,如下所示:

Beginning month:  10
Beginning year: 2010
Ending month:  01
Ending Year 2020
我想查询我的实体,并得到所有相等或介于这些范围之间的内容

所以,我想要从2010年10月到2020年1月的一切

我有这段代码,我被困在如何正确转换日期和比较:

     dollartotals = (from x in se.AchBatches
      where x.CompanyCode == company &&
            DbFunctions.TruncateTime(x.DateTimeSubmitted) >=  
              // stuck here
      select x.DollarTotal).Sum();
如何处理单个月/年字符串并在没有日期的情况下进行日期比较


谢谢你的帮助

您希望检查提交的实际日期时间,而不是它的截断版本

关键是提前构建实际的日期时间,然后进行常规的日期窗口检查

假设您有问题中列出的四个字符串:

//you might use TryConvert or a Try block here to validate your string data...
int beginYear = Integer.Convert(strBeginYear);
int beginMonth = Integer.Convert(strBeginMonth);
int endYear = Integer.Convert(strEndYear);
int endMonth = Integer.Convert(strEndMonth);

DateTime start = new DateTime(beginYear, beginMonth, 1);
DateTime endLimit = new DateTime(endYear, endMonth, 1).AddMonths(1);

dollartotals = (from x in se.AchBatches
      where x.CompanyCode == company &&
            x.DateTimeSubmitted >= start &&
            x.DateTimeSubmitted < endLimit
      select x.DollarTotal).Sum();
//您可以在此处使用TryConvert或Try块来验证字符串数据。。。
int beginYear=Integer.Convert(strBeginYear);
int beginMonth=Integer.Convert(strBeginMonth);
int endYear=Integer.Convert(强度);
int endMonth=Integer.Convert(强度月);
DateTime start=新的日期时间(beginYear,beginMonth,1);
DateTime endLimit=新的日期时间(endYear,endMonth,1)。AddMonths(1);
dollartotals=(从se.AchBatches中的x开始)
其中x.CompanyCode==公司&&
x、 DateTimeSubmitted>=开始&&
x、 DateTimeSubmitted
您希望检查提交的实际日期时间,而不是它的截断版本

关键是提前构建实际的日期时间,然后进行常规的日期窗口检查

假设您有问题中列出的四个字符串:

//you might use TryConvert or a Try block here to validate your string data...
int beginYear = Integer.Convert(strBeginYear);
int beginMonth = Integer.Convert(strBeginMonth);
int endYear = Integer.Convert(strEndYear);
int endMonth = Integer.Convert(strEndMonth);

DateTime start = new DateTime(beginYear, beginMonth, 1);
DateTime endLimit = new DateTime(endYear, endMonth, 1).AddMonths(1);

dollartotals = (from x in se.AchBatches
      where x.CompanyCode == company &&
            x.DateTimeSubmitted >= start &&
            x.DateTimeSubmitted < endLimit
      select x.DollarTotal).Sum();
//您可以在此处使用TryConvert或Try块来验证字符串数据。。。
int beginYear=Integer.Convert(strBeginYear);
int beginMonth=Integer.Convert(strBeginMonth);
int endYear=Integer.Convert(强度);
int endMonth=Integer.Convert(强度月);
DateTime start=新的日期时间(beginYear,beginMonth,1);
DateTime endLimit=新的日期时间(endYear,endMonth,1)。AddMonths(1);
dollartotals=(从se.AchBatches中的x开始)
其中x.CompanyCode==公司&&
x、 DateTimeSubmitted>=开始&&
x、 DateTimeSubmitted
我想要从2010年10月到2020年1月的所有东西

不确定您是否想要一个日期时间序列,该序列包含这些日期之间的每一个勾号、每一秒或每一天。假设您需要每天:从startDate.Date到endDate.Date的所有天

我使用StartDate.Date,所以如果StartDate是2020-02-05 13:20:14,那么你仍然可以得到2020年2月5日00:00:00

IEnumerable<DateTime> GetDateRange(DateTime startDate, DateTime endDate)
{
    DateTime lastDate = endDate.Date;
    DateTime date = startDate.Date;
    while (date <= lastDate)
    {
        yield return date;
        date = date.AddDays(+1);
    }
}
您将获得从2020年2月1日到2020年2月29日(含)的序列

我想要从2010年10月到2020年1月的所有东西

不确定您是否想要一个日期时间序列,该序列包含这些日期之间的每一个勾号、每一秒或每一天。假设您需要每天:从startDate.Date到endDate.Date的所有天

我使用StartDate.Date,所以如果StartDate是2020-02-05 13:20:14,那么你仍然可以得到2020年2月5日00:00:00

IEnumerable<DateTime> GetDateRange(DateTime startDate, DateTime endDate)
{
    DateTime lastDate = endDate.Date;
    DateTime date = startDate.Date;
    while (date <= lastDate)
    {
        yield return date;
        date = date.AddDays(+1);
    }
}


您将获得从2020年2月1日到2020年2月29日(含)的序列。

这似乎是linq to entities查询。您使用的是哪个版本的实体框架或实体框架核心?请适当更新您的标记。
如何处理单个日期/年份字符串并在没有日期的情况下进行日期比较?
所以您只想比较年份?@devNull我实际上想比较月份和年份。日期部分呢?对的为什么不干脆
=myDatetime.Date
??@ErocM,这样你就有了月份和年份?不是一天和一年?如果是这样,您应该更新该问题,因为它当前表示您有日期和年份这似乎是linq to entities查询。您使用的是哪个版本的实体框架或实体框架核心?请适当更新您的标记。
如何处理单个日期/年份字符串并在没有日期的情况下进行日期比较?
所以您只想比较年份?@devNull我实际上想比较月份和年份。日期部分呢?对的为什么不干脆
=myDatetime.Date
??@ErocM,这样你就有了月份和年份?不是一天和一年?如果是这样,你应该更新这个问题,因为它现在说你有日期和年份,也许我有误解,但这不会给我一个额外的一天,在结束月份,额外月份的第一天吗?不,因为比较少于。这说明了直到前一天的最后一个滴答声,但不会持续到下个月。是的,我错过了,现在尝试一下,以寻求帮助!也许我误解了,但这不会给我一个额外的一天在月底,额外的一个月的第一天吗?不,因为比较少于。这说明了直到前一天的最后一个滴答声,但不会持续到下个月。是的,我错过了,现在尝试一下,以寻求帮助!问题不是在开始月和结束月/日期之间创建一个
DateTime
值序列,而是询问如何筛选在给定开始月和结束月之间发生的记录。要仅保留序列中位于另一个序列中的那些对象,请使用Where((x)=>OtherSequence.Contains(x))。我的回答侧重于如何为OtherSequence创建查询。我认为包含的部分是显而易见的,对你和我来说是显而易见的,但对每个人来说可能不是显而易见的。这将起作用,尽管考虑到问题中的9年日期范围,这将最终生成一个3400+
DateTime
值的序列,必须对每个记录进行搜索。此外,由于您已经硬编码了开始和结束
DateTime
值的组件值,因此没有显示如何以编程方式确定它们。老实说,我觉得如果只关注一句话,你就错过了问题的重点。这个问题不是要创建一个
日期序列