【问题标题】:how to get the records between specific time in entity framework如何在实体框架中获取特定时间之间的记录
【发布时间】:2017-07-28 10:50:30
【问题描述】:

我想获取上午 7 点到下午 3 点之间的记录。如何编写相同的 linq 查询?

代码

 var items = Pirs.Where(a => !a.dataFrame.EndsWith("AAAAAAAAAAA=") && (fromDate == null || fromDate.Value.Date <= TimeZoneInfo.ConvertTimeFromUtc(Convert.ToDateTime(a.timestamp), TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")).Date) && (toDate == null || toDate.Value.Date >= TimeZoneInfo.ConvertTimeFromUtc(Convert.ToDateTime(a.timestamp), TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")).Date) && (a.timestamp.Hour > 7 || a.timestamp.Hour < 15))
               .GroupBy(a => a.dataFrame.Substring(a.dataFrame.Length - 12))
               .Select(g => g.First()).OrderBy(a => a.timestamp);

样本数据

timestamp   "2017-07-21T14:06:02.203Z"

【问题讨论】:

    标签: c# linq model-view-controller


    【解决方案1】:

    你的问题是这样写的,很难准确理解你在问什么,所以我会给你一个通用的方法来实现你想要的(我认为)。

    假设你有一堂课,Foo:

    class Foo
    {
        public DateTime date { get; set; }
    }
    

    给定List&lt;Foo&gt;,您可以在该列表中获取Foo 的所有实例date 属性在特定时间之间,如下所示:

    var myList = new List<Foo>();
    int startHour = 7; // 7am
    int endHour = 15; // 3pm
    var result = myList.Where(item => item.date.Hour >= startHour && item.date.Hour <= endHour);
    

    result 枚举包含 myList whos date 属性的 Hour 字段介于 startHourendHour 之间的所有项目。

    需要注意的是,您可以使用扩展方法来大大简化此操作:

    public static bool Between(DateTime input, int x, int y)
    {
        return (input.Hour => x && input.Hour <= y);
    }
    
    var result = myList.Where(item => item.date.Between(7, 15));
    

    但是,您提到您使用的是实体框架,这与第二种解决方案不兼容,因为当您查询 DbSet 时,该操作不是由您的程序执行,而是由 EF 转换为 SQL 并由而是数据库提供程序。在查询中使用扩展方法需要先将所有内容加载到内存中,我不建议这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      相关资源
      最近更新 更多