2014-10-27 19 views
-3

我的意圖是彙總結果而不是縮小結果。如何將以下linq查詢轉換爲像SQL一樣的(有)

if (Request.QueryString["VenueType"] == null) 
    Renders = _renderContext.Renders; 
else 
{ 
    List<int> venueTypeIds = Request.QueryString["VenueType"].Split(',') 
     .Select(int.Parse).ToList(); 
    Renders = _renderContext.Renders.Where(v => venueTypeIds.Contains(v.VenueTypeId)); 
} 

// SECOND CRITERION: 
if (Request.QueryString["SearchTerm"] != null) 
    Renders = Renders.Where(r => r.Title.ToLower() 
     .Contains(Request.QueryString["SearchTerm"].ToLower())); 

// ADDITIONAL CRITERION: 
if (Request.QueryString["EventType"] != null) 
{ 
    List<int> eventTypeIds = Request.QueryString["EventType"].Split(',') 
     .Select(int.Parse).ToList(); 
    Renders = Renders.Where(w => eventTypeIds.Contains(w.EventTypeId)); 
} 

if (Request.QueryString["DisplayFormat"] != null) 
{ 
    List<int> displayFormatIds = Request.QueryString["DisplayFormat"].Split(',') 
     .Select(int.Parse).ToList(); 
    Renders = Renders.Where(w => displayFormatIds.Contains(w.DisplayFormatId)); 
} 

查詢字符串來自可能有一個到多個選項的複選框組。我試圖返回的結果不應該在第一組標準後縮小,而是返回更多結果。

問題:如何使用where子句或GroupBy子句獲取返回項目的聚合,而不是縮小返回的項目?

+0

我投這個答案被關閉,因爲即使我已經說過這個問題,我有一個答案幫助了我。它可能有輕微的語法錯誤,但它對我有幫助。其他人已經低估了它,如果其他人認爲這很糟糕,即使它對我有很大的幫助,它也一定是壞的。我不會在Stack Overflow上發佈太多內容,而是會向我的同事尋求我對問題的解答。感謝把我放在我的地方堆棧溢出! – 2014-10-29 12:39:02

回答

-1

如果我正確理解你的問題,你可以逐步建立你的結果,這樣的事情(代碼減少簡潔)...

IQueryable query = from x in Context.Stuff 
        select x; 

List<Stuff> output = List<Stuff>(); 

output = query.Where(r => r.Title).Contains("SearchTerm")).ToList(); 
output += query.Where(r => r.Title).Contains("DifferentSearchTerm")).ToList(); 

this So post對於如何在Linq的執行明確GROUP BY,儘管根據你的標準的複雜性,我認爲這是相當難以維持的。

+1

@EricB歡迎您,這裏的關鍵是保持最初的IQueryable完好無損,並檢索結果並有效地將它們自己合併到一個「輸出」變量中......並且不要被可能盛行的有點迂腐元素所抵消在SO上。 – 2014-10-27 14:56:04

+1

和heres linq與擁有和groupby ... euch http://stackoverflow.com/questions/18050386/linq-to-sql-having-and-group-by – 2014-10-27 15:00:11