下面的函数返回Cannot convert lambda expression to type 'bool' because it is not a delegate type
var Products = from s in db.Products where
( from c in s.Manufacturers
where (x => (from man in model.man where man.HasValue select man.Value).Contains(c.ManufacturerID)
select c).Any()
select s;
虽然这只是工作
if (model.man != null)
{
var students = from s in db.Products
where (from c in s.Manufacturers
where model.man.Contains(c.ManufacturerID)
select c).Any()
select s;
}
在第一种情况下,我做错了什么?model.man声明为
public int?[] man { get; set; }
3条答案
按热度按时间jbose2ul1#
您可以使用null条件访问(在C# 6中)
编辑:添加了
?? false
,因为bool
和bool?
之间没有隐式转换v8wbuo2f2#
就像Rahul说的,你不能混合查询和方法的语法。
如果你想在特定的点使用lambda表达式,你总是可以用一个句点链接它,例如:
尽管出于个人喜好(可读性),我不希望混合这两种语法,如果你不熟悉方法语法,ReSharper确实提供了将查询转换为方法链的选项(锤子图标)。
6jygbczu3#
我在一个简单的for循环中也遇到了同样的错误。错误是由于放错了“=”符号。
它是
如果你仔细看代码,你会发现=被放在〉前面,它应该是小于或等于,即〉=。
正确的代码应为
希望这能帮到什么人。