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}

私がやろうとしているのは、最も古くて最も頻繁なオファーに関連するオファーのリストを選択することです。 この場合は で一度です。開始日が最も古く、最も頻度が高いためです。 すべての条件を 1 つのコマンドに入れる方法がわかりません。offerIdstartdate
offerId=101/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であるこのオファー ID には、最も古い fromdate である01/01/2011があり、最も頻度の高い fromdate である01/01/2011もあるからです。(2011/01/01 は、メイン リストの fromdate として 3 回表示されます)

4

2 に答える 2

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 に答える
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 に答える