我試圖做一個linq語句,與3部分的情況。我擁有它的方式看起來超級醜陋,我希望有人會透露一種更乾淨的方式來做到這一點。它的醜陋所以我要去把它分解成部分清潔的方式在linq做案例
爲了解釋這一點我連接這兩個表像這樣,執行左連接
from ccc in cDataContext.CategoryCountryCategoryTypeMappings
join cl in currentLogs
on ccc.CategoryCountryCategoryTypeMappingID equals
cl.CategoryCountryCategoryTypeMappingID into final
然後我通過storefrontID
篩選出結果where f.CategoryCountryCategoryTypeMapping.Category.StorefrontID == StorefrontID
我然後組然後訂購
group f by new {f.CategoryCountryCategoryTypeMapping.Category.CategoryID} into t1
orderby t1.Key.CategoryID
最後我試圖將結果輸出到一個結構,但看看狀態
select new
CategoryStruct {
CategoryName =t1.Max(x=>x.CategoryCountryCategoryTypeMapping.Category.Name) ,
Status = t1.Any(n=>n.Response==null)?99:t1.Any(n=>n.Response==0)?0:-1,
AverageResponseTime = (int)t1.Average(x => x.CaptureTime),
categoryId = t1.Key.CategoryID
});
我使用terator操作符,它看起來很可怕。如果響應爲空(由於聯接)let狀態爲0,我試圖說,否則如果響應爲0,則讓狀態爲0,否則讓狀態爲-1。我不認爲把一個if語句會使它看起來更好。性能也是一個問題,將會有大約50k行,但執行分組後只有大約20個categoryStructs。
如果您有工作代碼,只想尋求改進,請將問題發佈在[代碼審查](http://codereview.stackexchange.com/)而不是StackOverflow上。 –
@ Pierre-LucPineault不要假設這是一個簡單的轉移按鈕? –
我不這麼認爲。但是您可以輕鬆地複製粘貼文本,CR也是一個StackExchange網站,因此問題語法/符號相同。 –