我有一个表单,用户可以选择开始和结束日期来获取数据。 尽管用户选择开始和结束日期,但我必须在日期范围内逐周显示表格中的数据。
我的模型很简单
public class DateBetween
public Datetime StartDate{ get;set;}
public Datetime EndDate{ get;set;}
我从数据库中获取这些日期之间的数据列表
IList<Revenue> datas = DB.CreateCrateria(typeof(Revenue))
.Add(Restrictions.Bt("Date", model.startDate, model.endDate))
.List<Revenue>();
public class Revenue
public int Id{ get;set;}
public double Revenue { get;set;}
public Datetime RevenueDate{ get;set;}
例子:
id Date Revenue
1 10/11/2011 554
2 11/10/2011 500
等等
如果用户选择像 6/30/2011 和 10/15/2011 这样的日期
我想展示给用户
Week Date Avg.Revenue
Week 1 6/30/2011-7/2/2011 587
Week 2 7/3/2011-7/9/2011 650
...
etc
是否有任何关于聚合函数的建议。在 linq 中
最佳答案
您可以使用手写的 LINQ 或使用此答案:
LINQ query to split an ordered list into sublists of contiguous points by some criteria
示例:只使用普通的 Linq 和 DateTime/Calendar:
var rnd = new Random();
var data = Enumerable.Range(1,100).Select(i => DateTime.Now.AddDays(rnd.Next(-91000,91000)/24));
var calendar = CultureInfo.CurrentCulture.Calendar;
Func<DateTime, int> twoWeeks = dt => (dt.Year * 100) + 2 * (calendar.GetWeekOfYear(dt, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday) / 2);
var by2weeks = data.GroupBy(twoWeeks);
foreach (var period in by2weeks.OrderBy(g => g.Key))
{
Console.WriteLine("{0}: {1}", period.Key, string.Join(", ", period));
}
对于 C# 3.5 及更早版本 string.Join(", ", period)
string.Join(", ", period.Select(o => o.ToString()).ToArray())
关于c# - 用户通过 linq 等选择的日期范围到几周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8112800/