2012-07-25 79 views
2

我想知道是否有可能做的拉姆達內的其他明智的類型語句,相似的東西:C#拉姆達另有聲明

有一個看起來完全一樣,除了一列中有兩個表的結構,稱爲簡介(表1)和說明(表2)。我的組件讀取兩個表中的任何一個,根據財產,並希望做一個lambda表達式來確定列是否存在:

(from p in table[this.TableName] 
where (p["Description"] != null) 
'otherwise' where (p["Synopsis"] != null) 
select p).First(); 

欣賞的幫助。

回答

2

提供訪問一個不存在的列不拋出一個異常,你應該能夠使用邏輯OR運算符(||):

(from p in table[this.TableName] 
where (p["Description"] != null || p["Synopsis"] != null) 
select p).First(); 
+0

完全可以接受 – atiyar 2012-07-25 11:45:24

0

不,你不能擴展LINQ查詢理解語法添加新的關鍵字。 可以可以做的是添加更多的擴展方法,並且以這種方式編寫自己的邏輯 - 但在這種情況下它不會真的有用,因爲.Where(...).Otherwise(...)實際上並不會得到任何「其他」數據 - 序列會已經被Where(...)過濾了。

另外:除非這是LINQ到對象,你應該期望查詢解釋器扼殺它。更簡單的答案是「不,你不能這樣做」。

正如其他人已經注意到,你可以只是通過||簡化條件。

0

聽起來像是邏輯或(「||」)是解決方案,假設您的索引器爲不存在的列返回null

0

這有什麼錯|| -

(from p in table[this.TableName] 
    where (p["Description"] != null || p["Synopsis"] != null) 
    select p).First(); 

???