我正在尝试在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个表的信息。
由于
答案 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
吗?