2016-08-02 49 views
1

所以我有「不斷擴展的LINQ查詢」...我發現自己必須處理一些參數,並且我正在交叉。我有這樣的:添加或我的LINQ查詢?

var ud = db.Updates 
    .Where(c => c.Sold.Equals(false)&&(c.Status.Equals(("Pending")))) 
    .GroupBy(c => c.Vehicle) 
    .Select(x => x 
     .OrderByDescending(y => y.TimeStamp) 
     .First()) 
    .ToList(); 

,我需要一個或添加到「c.Status.Equals」,測試多個字符串值...如「待定」 || 「拒絕」什麼是正確的方式/地點來做到這一點?

非常感謝您的幫助!

+0

爲什麼不是'c =>!c.Sold && c.Status ==「Pending」'?你真的不需要在這裏使用'Equals'。 – juharr

回答

11

你可能要考慮存儲值的數組,看看是否有任何限制的滿足:

// Store all of the statuses you need to match within a collection 
var validStatuses = new []{ "Pending", "Rejected", ... }; 

然後你只需要更新您的Where()子句來檢查,如果您現有的地位相匹配的任何那些先前定義的集合中:

db.Updates.Where(c => !c.Sold && validStatuses.Contains(c.Status))) 
+0

...謝謝!我知道必須有一個更簡單的方法來做到這一點,但Intellisense尖叫。那裏有語法錯誤嗎?我越來越穿衣服,但我試圖弄清楚。 – PaulBinCT2

+0

Oyyy ......當然。謝謝!我真的應該知道,不要熬夜來毆打我的頭,反對這種事情。我非常感謝!非常感謝! – PaulBinCT2

+0

糟糕。我錯過了大括號來表明上面的集合是一個數組。這應該可以解決問題。 –

0

(c.Status.Equals( 「待定」)|| c.Status.Equals( 「拒絕」))

var ud = db.Updates 

     .Where(c => c.Sold.Equals(false) &&(c.Status.Equals("Pending") || c.Status.Equals("Rejected"))) 
     .GroupBy(c => c.Vehicle) 
     .Select(x => x.OrderByDescending(y => y.TimeStamp).First()).ToList(); 
+0

@Ri @威廉姆斯...我可以再次贏得你的好意嗎?我意識到我需要做出改變,我的大腦正在融化。這裏最終的結果是我需要從我的表中檢索最新的條目是否包含數組值之一。這意味着我需要在末尾應用該子句(?) 我到目前爲止的內容如下: – PaulBinCT2

+0

var validStatuses = new [] {「Assigned」,「Donor Called」,「Dispatched」,「Waiting」}; VAR UD = db.Updates 。凡(C =>!c.Sold && validStatuses.Contains(c.Status)) .GroupBy(C => c.Vehicle) 。選擇(X => X .OrderByDescending(y => y.TimeStamp).First())。ToList(); 它返回多個條目,因爲「狀態」子句需要在日期之後發生,以便只有當狀態是我們數組中的狀態時才返回最近的條目。 對不起...你能幫忙嗎? – PaulBinCT2

+0

男人,我不知道我是否得到它。 你能展示回報和你的期望嗎? 但是,我認爲First()必須放在Select()之後。 例如: 選擇(x => x.OrderByDescending(y => y.TimeStamp))。First() –

0

嘗試使用||或運營商

(c.Status.Equals(("Pending")|| c.Status.Equals("Rejected"));