我有一个实体喜欢的实体列表
的优惠 的
Int OfferId
DateTime FromDate
DateTime ToDate
Bool Status
在List<Offer>
中,它也有重复OfferId
例如。
Offer1 { Id=1, From=01/01/2011, To=31/01/2011, Status=true }
Offer2 { Id=1, From=01/02/2011, To=28/02/2011, Status=false}
Offer2 { Id=2, From=01/02/2011, To=28/02/2011, Status=false}
Offer3 { Id=3, From=01/01/2011, To=31/01/2011, Status=true }
Offer4 { Id=4, From=01/01/2011, To=31/01/2011, Status=true }
Offer5 { Id=1, From=01/03/2011, To=31/03/2011, Status=false}
我要做的是选择与一个offerId
相关的优惠列表,其中startdate
具有最早且频繁offerId=1
。
在这种情况下,它是01/01/2011
的一次。因为它具有最早且最频繁的开始日期offerId
我不确定如何将所有条件都放在一个命令中。
我根据var list = OfferList.GroupBy(a => a.offerId).Select(g => g.Select(s => s));
对记录进行了分组,但我不确定如何继续
Offer1 { Id=1, From=01/01/2011, To=31/01/2011, Status=true }
Offer2 { Id=1, From=01/02/2011, To=28/02/2011, Status=false}
Offer5 { Id=1, From=01/03/2011, To=31/03/2011, Status=false}
更新
似乎有点混乱。我正在尝试选择满足条件的列表或记录。 在这种情况下,答案应该是
{{1}}
因为,这个 1 的offerid拥有最早的fromdate 01/01/2011 ,它也有最常见的fromdate, 01/01/2011 。 (01/01/2011在主列表中出现3次)
答案 0 :(得分:1)
var q = from t in offerList
group t by new { t.Id } into grp
select new
{
grp.Key.Id,
MinDate = grp.Min(t => t.From)
};
var re = q.ToList().OrderBy(p=>p.MinDate).FirstOrDefault();
虽未经过测试
答案 1 :(得分:1)
您可以在这里进行LinqPad测试:https://gist.github.com/3207484
var r = (OfferList.GroupBy(offer => offer.id)
.Select(group =>
new { offerid = group.Key,
offers = group.OrderBy(o => o.fromDt),
count = group.Count() })
.OrderBy(g => g.offers.First().fromDt) // list with the oldest
.ThenByDescending(g => g.count)).Dump() // then by most
.First().offers.First();