【问题标题】:LINQ get last 12 monthsLINQ 获取过去 12 个月
【发布时间】:2011-02-07 09:25:04
【问题描述】:

我怎么拉

过去 12(个月)的记录过滤条件 ServiceId,按最近排序

使用 linq 给定这个 db 表数据:

 - Date         ServiceId     Views     Clicks
 - 2009-03-01       3         88107     244223
 - 2009-03-01       5         41563     94770
 - 2009-03-01       7         24165     45378
 - 2009-03-01       8         16415     24311
 - 2009-03-01       4         50341     127114
 - 2009-04-01       3         70646     211999
 - 2009-04-01       5         40380     102241
 - 2009-04-01       7         23905     40768
 - 2009-04-01       8         18996     29220
 - 2009-04-01       4         45685     112635
 - 2009-05-01       3         81044     215753
 - 2009-05-01       5         46273     121343
 - 2009-05-01       7         25744     41578
 - 2009-05-01       8         21122     32607
 - 2009-05-01       4         54349     126914
 - 2009-06-01       3         74045     201224
 - 2009-07-01       3         60558     175043
 - 2009-07-01       5         28802     69091
 - 2009-07-01       7         16250     33784
 - 2009-07-01       4         36265     88727
 - 2009-08-01       3         59030     170027
 - 2009-08-01       5         27923     63875
 - ... 

【问题讨论】:

    标签: asp.net asp.net-mvc linq


    【解决方案1】:

    这会有帮助吗?

    “someServiceId”将是您要过滤的服务 ID。

    12 个月前:

    from x in data
    where x.Date > DateTime.Now.AddMonths(-12) && x.ServiceId == someServiceId
    orderby x.Date descending
    select x; 
    

    12 个月前的最新条目:

    from x in data
    let m = data.OrderByDescending(x.Date).First()
    where x.Date > m.Date.AddMonths(-12) && x.ServiceId == someServiceId
    orderby x.Date descending
    select x; 
    

    我没有通过编译器运行它,但希望它能让你朝着正确的方向前进。

    【讨论】:

    • 这行得通,但它只给了我 6 个月 :(。我明白为什么,这是因为我的最后一个日期是 9/1/2010。因此我不能使用 DateTime.Now ..我必须从最近的开始。??
    • 您的意思是从最近的条目算起 12 个月?还是从今天起 12 个月?如果是前者,让我更新我的答案。
    • 所以我想我必须这样做:.Where(item => item.Month > item.Month.Max()..但不确定如何
    • 自表格中最后一个(最近的日期)算起 12 个月
    【解决方案2】:
    var request = DataContext.YourTable.Where(e => DateTime.Now.AddMonths(-12) < e.Date)
                         .Where(e => e.ServiceId == filterServiceId)
                         .OrderByDescending(e => e.Date)
    

    【讨论】:

    • 没有这样的方法:TimeSpan.FromYears()。它只上升到TimeSpan.FromDays()
    • 对不起,我是凭记忆做到的,这是有道理的,因为 Timepan 不知道几个月的持续时间等...我会更正
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多