我想知道是否可以在lambda中做一个其他明智的类型语句,类似于:
有两个看起来完全相同的表结构,除了一个列,名为Synopsis(表1)和Description(表2)。我的组件根据属性读取两个表中的一个,并且想要执行一个lambda表达式来确定该列是否存在:
(from p in table[this.TableName]
where (p["Description"] != null)
'otherwise' where (p["Synopsis"] != null)
select p).First();
感谢帮助。
答案 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();
???