2013-04-16 106 views
4

我正在開發一個.NET應用程序,我需要根據條件過濾來自SQL Server 2008的數據。我的數據結構是這樣的:LINQ - 過濾器重複條件

enter image description here

結果進行分組和排序的關鍵。默認情況下,應該爲每個Key返回具有Revision null的行,但是如果revisionParameter被設置,則應該返回具有相應版本號的行。如果參數爲2,則輸出應爲:

abc  2  FALSE 
def null TRUE 
ghj  2  FALSE 
klm null TRUE 

我該如何在LINQ中完成此操作?由於

編輯: 迴應lazyberezovsky: 你的LINQ表達改寫爲lambda:

partial void RuleEntriesByUserSaveId_PreprocessQuery(int? UserSaveId, ref IQueryable<RuleEntry> query) 
{ 
query = query.Where(re => re.Revision == null || re.Revision == value) 
      .GroupBy(re => re.Key) 
      .Select(g => g.FirstOrDefault(x => x.Revision != null) ?? g.First()); 
} 
+4

你嘗試過什麼嗎? –

回答

3
from r in Table 
where !r.Revision.HasValue || r.Revision.Value == value 
group r by r.Key into g 
select g.FirstOrDefault(x => x.Revision.HasValue) ?? g.First() 

這將選擇有修訂等於null或到指定的值或者記錄。在按鍵分組後,我們試圖找到任何具有值修改的記錄(該值將等於過濾器)。如果沒有修改記錄,我們只需從組中取得第一條記錄。

+0

感謝您的回答。我實際上在做一個LightSwitch應用程序,最簡單的事情就是將它寫成lambda。因此我重寫了你的代碼,但我沒有得到它的工作。我的重寫代碼看起來好嗎? –

+0

這比他整合的查詢語言更具原生感覺;有時會讓我想起使用VB.NET進行糟糕的內聯-XML集成。 –

+0

@OskarEriksson你的查詢對我來說看起來很好(我曾用'HaValue'屬性代替與null比較)。什麼不工作?例外? –