2

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

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

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

感谢帮助。

4

3 回答 3

2

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

(from p in table[this.TableName]
 where (p["Description"] != null || p["Synopsis"] != null)
 select p).First();
于 2012-07-25T10:56:03.480 回答
0

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

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

正如其他人所指出的,您可以通过简化条件||

于 2012-07-25T10:57:51.913 回答
0

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

于 2012-07-25T10:58:03.753 回答