2012-07-25 177 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(); 

???