2016-08-02 18 views
-2

唉...我的墓誌銘會說「死了再增加一個條款,以LINQ查詢」重新排列我的LINQ中的子句?

所以,我有以下幾點:

var validStatuses = new[] { 
    "Assigned", "Donor Called", "Dispatched", "Waiting", 
    "Title Rec'd", "Sending Title", "Cancelled", "Waiting"}; 

var ud = db.Updates 
    .Where(c => !c.Sold && validStatuses.Contains(c.Status)) 
    .GroupBy(c => c.Vehicle) 
    .Select(x => x 
    .OrderByDescending(y => y.TimeStamp) 
    .First()) 
    .ToList(); 

而且我已經意識到我需要有包含日期後的子句。換句話說,只有當最近的條目包含「validStatuses」時,我才需要選擇最新的條目。現在只要每個條目包含「validStatuses」,它就會返回多個條目。

我會深表謝意!謝謝!

+0

你有什麼問題重新查詢相應的查詢? – Servy

+0

_I只有當最近的條目包含「validStatuses」時才需要選擇最近的條目_ - 如果它不包含有效狀態,您想選擇什麼? –

+0

你可以舉一個你正在查詢的數據的例子,你現在得到的結果以及你想得到的結果。對不,我不知道你是否想要每輛車或只有一輛車進入一次。 – juharr

回答

0

我的理解是,這可能是工作(但我錯過了最新評論...):

var ud = db.Updates 
       .Where(c => !c.Sold) 
       .GroupBy(c => c.Vehicle, x => x, (x,gr) => new { key = x, 
        list = gr.ToList().OrderByDescending(z => z.TimeStamp).First() }) 
       .Where(x=> validStatuses.Contains(x.list.Status)) 
       .Select(x => x.list).ToList(); 

這是一個分組通過車輛並在最近的項目有它僅保留組有效狀態...

+0

非常感謝!很遺憾,這看起來不太合適。不恨我......我很累)查詢後,我正在對結果進行連接,並且您的查詢似乎打破了它。如果你傾向於繼續嘗試幫助我,那麼整個事情如下: – PaulBinCT2

+0

@ PaulBinCT2是否拋出'DoesNotWorkException'? –

+0

我現在看到問題了。你有一個'ToList',你不需要它。 –

1

正如您在您的問題中所建議的,只需在日期後移動contains子句即可。

var ud = db.Updates 
    .Where(c => !c.Sold) 
    .GroupBy(c => c.Vehicle) 
    .Select(x => x 
    .OrderByDescending(y => y.TimeStamp) 
    .First()) 
    .Where(c => validStatuses.Contains(c.Status)); 

另外,如果你打算使用ud下來的LINQ到實體查詢行,那麼就不要你的查詢在最後轉換到一個列表。