“无法隐式转换..”当使用LINQ Where时

时间:2014-07-31 18:43:37

标签: c# linq

我正在尝试在c#程序中编写一个查询,该程序从数据库中获取所有项目,其中该项目中的特定ID包含在我拥有的列表中。我还需要加入一些桌子..

我拥有的是:

var data = from a in db.Apples.Where(a => myApples.contains(a.type))
           from b in db.Banans where b.Id = a.bananaPair.Id
           from c in db.Coconuts where c.Id = c.coconutPair.Id
           select new {
               apple = a,
               bananaName = b.name,
               coconutName = c.name,
           });

我在“where b.Id = a.bananaPair.Id”中收到“无法隐式将int转换为bool”的错误。我想我正在混合类型..第一个是比较,其他是连接条件。如何在查询中同时执行这两项操作?我需要选择对象中所有3个表的信息。

由于

1 个答案:

答案 0 :(得分:2)

将其更改为

var data = from a in db.Apples.Where(a => myApples.contains(a.type))
       from b in db.Banans where b.Id == a.bananaPair.Id
       from c in db.Coconuts where c.Id == c.coconutPair.Id
       select new {
           apple = a,
           bananaName = b.name,
           coconutName = c.name,
       });

你有b.Id = a.bananaPair.Id。这会将a.bananaPair.Id分配给b.Id。您的错误将此分配称为int的原因是,分配会返回分配的值。你想要b.Id == a.bananaPair.Id来测试它们是否相等。

作为评论者@misterManager建议,你也可以在这里使用join。但是,如果这不起作用,请告诉我,因为我使用了查询语法已经很久了。

var data = from a in db.Apples.Where(a => myApples.contains(a.type))
       join b in db.Bananas on a.bananaPair.Id equals b.Id
       join c in db.Coconuts on c.coconutPair.Id equals c.Id
       select new {
           apple = a,
           bananaName = b.name,
           coconutName = c.name,
       });

顺便说一句,我忍不住注意到你的c行:from c in db.Coconuts where c.Id == c.coconutPair.Id,那应该是a.coconutPair.Id吗?