2012-07-30 73 views
1

我有實體的名單,其中實體喜歡使用多組通過選擇一個記錄和統計

發售

Int OfferId 
DateTime FromDate 
DateTime ToDate 
Bool Status 

List<Offer>,它具有複製OfferId以及 EG 。

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} 

因爲,這OFFERID這是具有這是01/01/2011最古老沒有fromdate它也有最頻繁的沒有fromdate這是01/01/2011。 (01/01/2011是出現3次在主列表沒有fromdate)

+0

這是優先考慮最早還是最頻繁? – Hogan 2012-07-30 14:06:37

+0

@Hogan:需要檢查最早的最早的和最老的一組,最頻繁的日期 – 2012-07-30 14:07:41

+0

如果最早的日期不是最頻繁的開始日期,會發生什麼? – PCasagrande 2012-07-30 14:40:07

回答

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

我已更新問題請看看! – 2012-07-30 14:35:56

+0

@huMptyduMpty - 確定它現在 - 只需要拿出最後一個'First()' – Hogan 2012-07-30 14:55:42

+0

輝煌,謝謝! – 2012-07-30 15:04:10

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

未測試雖然

+0

感謝您的回答,但這會返回多個offerid的記錄。我只需要記錄一個符合我在問題中提到的條件的offer ID。這也是檢查最多發生在日期? – 2012-07-30 14:16:13

+0

編輯答案... – 2012-07-30 14:28:42

+0

請看看更新的問題! – 2012-07-30 14:36:32