2011-09-26 42 views
-1

我一直在c#.net 3.5中做了一些linq,覺得我應該能夠做到以下一點整潔。改進c#linq表達式的算法和語法

有沒有辦法將這個結合成一個linq語句。

的條件如下

  1. 如果列表中包含的元素,其中的計數大於或等於 閾值,則我們可以使用該列表
  2. 訂單列表通過計數
  3. 訂購按日期列出

我還想在計數中添加另一個條件,以便我可以將所有項目的計數大於或等於閾值相同。我可以通過將計數限制到閾值來實現這一點,但我不希望在閾值發生變化的情況下。我對如何做到這一點有點難,除了臨時編輯記錄時,我從數據庫中獲取它們並不保存它們。即在按日期排序之前,列表(1,2,3,4,5)的閾值爲3(3,3(4),3(5),2,1))。

var allFaves = m_favouriteRepo.Get(user); 

if(allFaves.Any(t => t.Count >= threshold)) 
{ 
    var ordered = allFaves 
       .OrderByDescending(x => x.Count) 
       .ThenByDescending(x => x.SortDate) 
       .ToList(); 
} 

感謝 尼爾

+1

'任何()'返回一個布爾值。 '!= null'沒有任何意義。 – SLaks

+0

這是linq-to-sql,實體框架還是兩者都不?使用nHibernate的 – AakashM

+0

。對不起,關於!= null – Neil

回答

3
if(allFaves.Any(t => t.Count >= threshold)) 
{ 
    var ordered = allFaves 
       .OrderByDescending(x => x.Count>=threshold?threshold:x.Count) 
       .ThenByDescending(x => x.DatesHistory) 
       .ToList(); 
} 
+2

或甚至可能是'OrderByDescending(x => Math.Min(x.Count,threshold))',這取決於使用的LINQ提供程序。 – LukeH

+0

謝謝,這看起來就像票 – Neil