无法将 lambda 表达式转换为类型“bool”,因为它不是委托类型。

3
以下返回“无法将 lambda 表达式转换为类型 'bool',因为它不是委托类型”。
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; }

1
为什么你在第一个查询中加上了'x =>'?删除它,因为那是一种查询语法而不是方法语法。 - Rahul Singh
3个回答

2
您可以使用空安全访问运算符(在C# 6中),代替传统的null检查方法。
var students = from s in db.Products
               where (from c in s.Manufacturers
               where model.man?.Contains(c.ManufacturerID) ?? false
               select c).Any()
               select s;

编辑:添加了 ?? false,因为在 boolbool? 之间不存在隐式转换。


0

就像Rahul所说,您不能混合使用查询和方法语法。这应该可以编译:

 var Products = from s in db.Products
                       where(from c in s.Manufacturers
                             where (from man in model.man
                                    where man.HasValue
                                    select man.Value)
                                    .Contains(c.ManufacturerID)
                             select c).Any()
                       select s;

如果您想在特定点使用lambda表达式,您可以始终使用句点链接,例如:
var Products = from s in db.Products
                           where(s.Manufacturers
                           .Where(c => (from man in model.man
                               where man.HasValue
                               select man.Value)
                               .Contains(c.ManufacturerID))).Any()
                           select s;

虽然出于个人偏好(可读性),我宁愿不混合这两种语法。如果您对方法语法不熟悉,ReSharper 提供了将查询转换为方法链的选项(锤子图标)。


0

我在一个简单的for循环中也遇到了同样的错误。这个错误是由于"="符号放错位置造成的。

具体来说,是这样的:

 for(int i=10;i=>0;i--)
{
 //your code
}

如果您仔细查看代码,就会发现=放在>的前面。应该是小于或等于,即>=
正确的代码应该是:
for(int i=10;i>=0;i--)
    {
     //your code
    }

我希望这可以帮助到某人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接