我有一个要求,我必须强迫一个持续时间显示为两年完成。例如,从2016年到2018年在某个应用程序中在线活动的任何客户都应被视为该应用程序中的两年完成时间。这似乎很简单,并使用以下Linq
使其起作用:
var result = (from c in db.Users
where c.UserId == id && (c.Start.Year >= 2016 && c.End.Year <= 2018)
select c).ToList ();
int years = 0;
if (result.Count () > 0)
{
years = 2;
}
else
{
//Logic goes here
}
因此可以看出,我强迫它计算两年期限。以此为基础,我将为用户授予系统20%的忠诚度。虽然我有点难以构建逻辑。同样,在此范围内,用户可能在2016年至2017年之间处于活跃状态。因此,这些用户将没有资格获得忠诚度。
对于不符合条件的用户,如何使上述条件在两个条件下工作两年?任何想法将不胜感激。
答案 0 :(得分:2)
我认为这就是你所追求的。它获取用户并确定开始年份和结束年份之间的时间跨度,将该值分配给年份,然后检查该值是否小于2。如果是,则逻辑如此。我假设UserId是唯一的,并且总是会有至少一个条目。
这是一个工作中的小提琴:https://dotnetfiddle.net/bVDpkF
var result = (
from c in db.Users
where c.UserId == id
select c).Single();
int years = result.End.Year - result.Start.Year;
if (years <= 2)
{
//Logic goes here
}
答案 1 :(得分:1)
您也许可以在Linq查询中计算时间跨度。
var list = cItems.Where(x => ((TimeSpan)(x.End - x.Start)).Days > 730).ToList();