我有这样一张表格
如果用户类型为B,则会有一个特殊的到期日期,因此对于这个人,结果将是:
代码可以得到我需要的结果,但问题在于结果集中有大约10000条记录,需要5到6秒钟的时间。这个项目是用于Web搜索API的,所以我想加快速度,有没有更好的方法来查询?
编辑
抱歉,我犯了一个错误,在选择子句中应该是
EffectiveDate = t.LastOrDefault().EffectiveDate 但在C#的Linq中,它不支持将此LastOrDefault函数转换为SQL,这引起了新的问题,获取组中第二个项的最简单方法是什么?
UserID Year EffectiveDate Type SpecialExpiryDate
1 2015 7/1/2014 A
1 2016 7/1/2015 B 10/1/2015
表格中没有 ExpriyDate
,因为它只有效期一年,所以可以通过在生效日期上加一年来计算到期日期。
我想要的结果是这样的(当前年份的生效日期和下一年的到期日期)
UserID EffectiveDate ExpiryDate
1 7/1/2014 7/1/2016
如果用户类型为B,则会有一个特殊的到期日期,因此对于这个人,结果将是:
UserID EffectiveDate ExpiryDate
1 7/1/2014 10/1/2015
这是我写的代码:
var result = db.Table1
.Where(x => x.Year>= 2015 && (x.Type == "A" || x.Type == "B"))
.GroupBy(y => y.UserID)
.OrderByDescending(x => x.FirstOrDefault().Year)
.Select(t => new
{
ID = t.Key,
Type = t.FirstOrDefault().Type,
EffectiveDate = t.FirstOrDefault().EffectiveDate,
ExpiryDate = t.FirstOrDefault().SpecialExpiryDate != null ? t.FirstOrDefault().SpecialExpiryDate : (t.Count() >= 2 ? NextExpiryDate : CurrentExpiryDate)
}
);
代码可以得到我需要的结果,但问题在于结果集中有大约10000条记录,需要5到6秒钟的时间。这个项目是用于Web搜索API的,所以我想加快速度,有没有更好的方法来查询?
编辑
抱歉,我犯了一个错误,在选择子句中应该是
EffectiveDate = t.LastOrDefault().EffectiveDate 但在C#的Linq中,它不支持将此LastOrDefault函数转换为SQL,这引起了新的问题,获取组中第二个项的最简单方法是什么?
new{Item=x.FirstOrDefault(), Count=x.Count() }
。 - EZI