1

我有一个实体喜欢的实体列表

提供

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
在这种情况下,它是一次 with 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的 offerid 具有最早的起始日期,即01/01/2011,它也具有最频繁的起始日期,即01/01/2011。(01/01/2011 在主列表中作为起始日期出现 3 次)

4

2 回答 2

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();

虽然没有测试

于 2012-07-30T14:09:27.000 回答
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();   
于 2012-07-30T14:18:56.993 回答