【问题标题】:Filtering date string formatted as mm-yyyy LINQ query by date?按日期过滤格式为 mm-yyyy LINQ 查询的日期字符串?
【发布时间】:2019-02-27 14:29:42
【问题描述】:

我们在 mm-yyyy 中有 Date 作为字符串。在 Db 中,日期字段存储为 varchar。我们需要通过 linq 过滤日期。

.where(m=>m.ItemId == itemId && DbFunctions.CreateDateTime
(m.INV_GRN.ExpDate.Split('-')[1].CompareTo(2019), m.INV_GRN.ExpDate.Split('-')
[1].CompareTo(2), 1, 0, 0, 0.0) >= DbFunctions.CreateDateTime(2019,2,1,0,0,0.0))

我们需要通过将日期拆分为月份和年份来进行比较。我们如何提取月份和年份部分以便进行比较?

那么最好的方法是什么,我错过了什么?

【问题讨论】:

  • 您是否要获取具有匹配 ID 且日期大于或等于(在本例中)2019 年 2 月 1 日的每个项目?我对您使用 CompareTo 函数的结果被传递到日期创建函数感到困惑。 CompareTo 的值不会返回年份部分或年份的数学差异,它只是根据排序顺序显示您的字符串是在比较字符串之前还是之后。
  • 如果您只想比较两者,可以从DateTime.Month 获取月份,从DateTime.Year 获取年份。

标签: c# .net visual-studio linq datetime


【解决方案1】:

如果您的收藏已经只是 mm-yyyy,我们可以直接致电 OrderByOrderByDescending

否则,我们可以这样做

{
   var dateTimeStrings = database.GetAllDateTimes(); /* get our strings in dd-mm-yyyy format */

    var dateTimes = dateTimeStrings.Select(c => DateTime.Parse(c));
    var monthsAndYearsOnly = dateTimes.Select(dateTime => new DateTime(dateTime.year, datetime.month, 0 /* it requires days, lets pass in 0 */));

    // Lastly to get our dates ordered 
    var orderedDates = monthsAndYear.OrderBy(dateTime => dateTime); // looks strange but we're saying order by the date

    return orderedDates;
}

【讨论】:

  • 基于 OP 提到 filtering 以及他们在代码示例中使用 Where,我怀疑排序结果不是主要问题。如果你接受你的建议,稍微调整一下,并在Where 子句中提供一个代码示例,我想你可能会得到 OP 正在寻找的答案。
  • 感谢您的建议!我会解决的
  • 在我的情况下,我将无法使用 Parse,如果我们使用 parse,则会引发以下异常。 Message=LINQ to Entities 无法识别方法 'System.DateTime ParseExact(System.String, System.String, System.IFormatProvider)' 方法,并且此方法无法转换为存储表达式。 Source=EntityFramework
【解决方案2】:

您可以将ExpDate 解析为日期并将其与特定日期进行比较,并且由于它们都从同一天开始,因此您只需比较月份和年份。

.Where(m=> m.ItemId == itemId && DateTime.Parse("01-"+ m.INV_GRN.ExpDate).Date >= DateTime.Parse("2019-02-01").Date)

【讨论】:

  • 在我的情况下,我将无法使用 Parse,如果我们使用 parse,则会引发以下异常。 Message=LINQ to Entities 无法识别方法 'System.DateTime ParseExact(System.String, System.String, System.IFormatProvider)' 方法,并且此方法无法转换为存储表达式。 Source=EntityFramework
  • 这里日期作为varchar存储在DB中。
猜你喜欢
  • 2015-06-11
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 2021-11-25
  • 2016-07-24
  • 1970-01-01
相关资源
最近更新 更多