[英]How to get the 1 month before records with age
我的 FilterByAgeRequest 类结构
public class FilterByAgeRequest
{
[Required(ErrorMessage = "Username required")]
public string userName { get; set; }
public DateTime? from { get; set; }
public DateTime? fromTo { get; set; }
}
我想用计数计算不同的年龄。
var query = await _dataContext.Users
.Where(p => p.UserDob != null && p.CreatedAt >= request.from.Date && p.CreatedAt <= request.fromTo.Date) // exclude null DOB's from stats
.GroupBy(p => p.UserDob.Year)
.Select(g => new FilterByAgeResponseCls{ Age = DateTime.Now.Year - g.Key, Count = g.Count() })
.OrderBy(g => g.Age).ToListAsync().ConfigureAwait(true);
上面的查询执行得很好,但现在我有了新的条件。 如果 from 和 fromTo 为NULL
我想从今天日期检索用户年龄数据前一个月的数据。 如何在 linq 中检查 from 和 fromTo。
提前致谢。
您需要在Where
子句中添加条件(request.from != null && request.fromTo != null)
如下:
var query = await _dataContext.Users
.Where(p => p.UserDob != null &&
((request.from != null && request.fromTo != null)
? //It means from and fromTo is not null
(p.CreatedAt >= request.from.Date && p.CreatedAt <= request.fromTo.Date)
: // else means if from or fromTo is null then retrieve data from last one month
p.CreatedAt > DateTime.Now.AddMonths(-1) ))
.GroupBy(p => p.UserDob.Year)
.Select(g => new FilterByAgeResponseCls{ Age = DateTime.Now.Year - g.Key, Count = g.Count() })
.OrderBy(g => g.Age).ToListAsync().ConfigureAwait(true);
您可以尝试使用此代码,它不需要太多更改并且可以更好地控制日期边界:
DateTime from;
DateTime to;
if( request.from == null || request.fromTo == null )
{
from = DateTime.Now.Date.AddMonths(-1);
to = DateTime.Now.Date.AddMonths(-1).AddDays(1);
}
else
{
from = request.from.Date;
to = request.fromTo.Date;
}
var query = await _dataContext.Users
.Where(p => p.UserDob != null && p.CreatedAt >= from && p.CreatedAt <= to) // exclude null DOB's from stats
.GroupBy(p => p.UserDob.Year)
.Select(g => new FilterByAgeResponseCls{ Age = DateTime.Now.Year - g.Key, Count = g.Count() })
.OrderBy(g => g.Age).ToListAsync().ConfigureAwait(true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.