2013-05-08 63 views
2

我知道這個工程:選擇所有的Lambda凡()

var result = someCollection.Select(x=>x); 

Where()方法類似的結果後,我:

var result = someCollection.Where(x=> someBool ? x : x.Key == 1); 

我想選擇「一切」如果someBool爲真。上面的代碼不起作用。有什麼辦法可以解決這個使用lambda?

+1

不知道你想要什麼。也許'someBool || x.Key == 1'。 – CodesInChaos 2013-05-08 07:56:35

+0

下面的答案是可行的,但是你可以在if語句中添加where子句嗎(即,如果'someBool'爲true,那麼不會添加它)? – 2013-05-08 08:13:20

+1

這是什麼linq提供程序?如果它是'Linq-To-Objects',你應該考慮爲'someBool'使用一個簡單的'if'子句。否則,即使你知道你想要所有的東西,你仍然在循環整個系列。 – 2013-05-08 08:31:30

回答

4

使用||運營商,如果someBool是真實的,它會選擇所有的記錄。

var result = someCollection.Where(x=> someBool || x.Key == 1); 
4

您正在尋找的conditional- OR操作

var result = someCollection.Where(x => someBool || x.Key == 1); 
1

這是測試的代碼

var result = someCollection.Where(x => someBool || x.Key == 1); 
+0

我沒有看到你的帖子我有我自己的嘗試和張貼我看到一些民族也分享same.You也是正確的 – 2013-05-08 08:32:05

1

作爲替代使用||Where的斷言它有時有用如果需要的話,只應用Where

var result = source; 
if(!someBool) 
    result = result.Where(x => x.Key == 1); 

這通常是一個快一點,因爲它並不需要在所有的過濾。但它暴露source到外面,這有時是不受歡迎的。

+0

+1,我喜歡這個自己,如果沒有很好的理由不發佈後它。但是這樣做。 (這是一個恥辱'AsEnumerable'在這裏沒有幫助。) – Rawling 2013-05-08 08:33:05

1

你可以做交替,

var result = someCollection; 

if (someBool) 
{ 
    result = someCollection.Where(x => x.Key == 1); 
} 

我覺得額外的輸入提高了代碼的可讀性和可提高性能。