C#lambda否则声明

时间:2012-07-25 10:53:24

标签: c# lambda

我想知道是否可以在lambda中做一个其他明智的类型语句,类似于:

有两个看起来完全相同的表结构,除了一个列,名为Synopsis(表1)和Description(表2)。我的组件根据属性读取两个表中的一个,并且想要执行一个lambda表达式来确定该列是否存在:

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

感谢帮助。

4 个答案:

答案 0 :(得分:2)

如果访问不存在的列不会抛出异常,您应该能够使用逻辑OR运算符(||):

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

答案 1 :(得分:0)

不,您无法扩展LINQ查询理解语法以添加新关键字。您可以做的是添加更多扩展方法,并以这种方式编写自己的逻辑 - 但在这种情况下它不会真正有用,因为.Where(...).Otherwise(...)实际上不会获取任何“其他”数据 - 该序列已经被Where(...)过滤了。

另外:除非是LINQ-to-Objects,否则你应该期望查询解释器能够阻塞它。更简单的答案是“不,你真的不能这样做。”

正如其他人所说,你可以通过||简化条件。

答案 2 :(得分:0)

听起来逻辑OR(“||”)就是解决方案,假设您的索引器为不存在的列返回null

答案 3 :(得分:0)

|| -

出了什么问题
 (from p in table[this.TableName]
  where (p["Description"] != null || p["Synopsis"] != null)
  select p).First();  

???