gpt4 book ai didi

c# - LINQ 到 SQL : Select count rows for each date in a provided range?

转载 作者:行者123 更新时间:2023-11-30 22:34:21 26 4
gpt4 key购买 nike

我有一个表帐户,其中有一列名为 CreatedOn(可为空的日期时间)。

我正在编写一个方法,它接受两个参数 from 和 to(DateTime 对象),我想选择 from 和 to 之间的所有日期以及在每个日期创建的 T 中的行数。

我怎样才能在 LINQ 中以优雅有效的方式做到这一点?

我试着这样做,但它似乎为列表日期中的每个日期查询一次数据库:

static void Test(DataClasses1DataContext context, DateTime from, DateTime to)
{
List<DateTime> dates = new List<DateTime>();
while (from <= to)
{
dates.Add(from.Date);
from = from.AddDays(1);
}

var result = dates.Select(d => new { Date = d, Count = context.Accounts.Count(a => a.CreatedOn.HasValue && a.CreatedOn.Value.Date == d) });
foreach (var row in result)
Console.WriteLine(row.Date + " " + row.Count);
}

最佳答案

已根据评论更新

我不会说它优雅,但它只查询一次数据库。

static void Test(DataClasses1DataContext context, DateTime fromDate, DateTime toDate)
{
var result = context.Accounts
.Where(p => p.CreatedOn >= fromDate && p.CreatedOn <= toDate)
.GroupBy(x => x.CreatedOn.Date)
.Select(x => new {
dt = x.Key,
count = x.Count()});
}

List<DateTime> dates = new List<DateTime>();
while (fromDate <= toDate)
{
dates.Add(fromDate.Date);
fromDate = fromDate.AddDays(1);
}

var allDates = dates.Select(x => new {
dt = x,
count = 0});

// Merge both lists and then filter to include highest count
var result = rows.Concat(allDates)
.GroupBy(x => x.dt)
.Select(x => new {
dt = x.Key,
count = x.OrderByDescending(c => c.count)
.FirstOrDefault().count});

关于c# - LINQ 到 SQL : Select count rows for each date in a provided range?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com