c# – 从linq where语句返回
我有以下链接功能
MyLinqToSQLTable.Where(x => x.objectID == paramObjectID).ToList(); 我大部分时间都可以通过在方法体周围添加花括号来将linq调用更改为多行.像这样: MyLinqToSQLTable.Where(x => { x.objectID == paramObjectID; }).ToList(); 问题是当我刚刚进行布尔比较时存在的隐含返回现在没有完成.返回(x.objectID == paramObjectID);也不被接受. 怎么办?我可以这样做吗? 注意:我知道如果需要我可以添加另一个where子句.但我仍然想知道答案. 解决方法
您的第一个查询与此相同:
MyLinqToSQLTable.Where(x => { return x.objectID == paramObjectID; }).ToList(); 你在这里缺少return关键字.当lambda主体是显式块而不是表达式时,这是必要的. 规范正式定义了语法中的lambda表达式,如:
前一种情况(表达式)适用于身体不以左大括号开头的情况.后一种情况(块)被定义为一系列语句(就像方法体一样).与C#中的其他位置一样,块中的表达式语句仅限于声明,赋值,函数调用,递增和递减.仅将operator ==应用于一对标识符并不表达有效语句.第二个问题是,当方法的返回类型(匿名或非匿名)不为void时,到达块末尾的所有代码路径都应返回一个值.因此,即使你的lambda的主体在语法上是有效的,没有return语句,你的lambda也可以转换为Action< T>,而不是Func< T,bool> Where方法所期望的. 更新:
当然,x => {return x.objectID == paramObjectID;只有当它应该转换为匿名方法而不是表达式树时,才能实现lambda表达式的变体.也就是说,具有块体的λ不能转换为表达式< T>.这就是为什么你可以在LINQ to Objects中使用它(其中Where采用Func< T,bool>)但你不能在LINQ to SQL中使用它(其中Where需要Expression< Func< T,bool>>). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |