我有一组足够简单的表,在典型的多对多关系中。
TableA => TableAB< = TableB
TableAB具有包含TableAID和TableBID的化合物PK。
我希望获得一个TableB的列表,给出一个TableAID sql看起来像:
select *
from tableA A
inner join TableAB AB
on A.AID = AB.AID
inner join TableB B
on AB.BID = B.ID
where A.ID = 5
我知道这看起来很基本,但我现在尝试使用实体框架5和MVC 4 lambdas工作几个小时。
到目前为止,我的代码看起来像这样(大多数错误):
Entities db = new Entities()
public List<TableB> GetBData(int AID)
{
var tableAdata = db.TableA.Where(a => a.AID == AID)
List<TableAB> tableB = new List<TableB>();
foreach (var a in tableAData)
tableB.BID = db.TableB.BID
}
我在想,必须有办法将表A的ID传递给它,然后将该表与链接表链接并返回其中存在的所有BID,然后使用BID&#39; s返回(0到多)以从B表中获取数据。
我教过这可能是菊花链接多个where子句,但我不知道怎么做,所以我要求指导。
只是为了澄清......我首先在SQL Server 2012中设置此模型(因此不首先使用代码),然后将EF5放入我的MVC4项目中。所以EF5在模型编码方面做了很多事情。我没有改变或添加EF5对其模型所做的任何事情。但我愿意做出任何需要的改动。
提前致谢。
答案 0 :(得分:1)
我认为简单地使用LINQ语法会更容易:
var result = from a in db.TableA
join ab in db.TableAB on a.AID equals ab.AID
join b in db.TableB on ab.BID equals b.BID
where a.AID == 5
select b;
当然你可以使用静态的Enumerable扩展方法来编写 - 实际上这是编译器所做的 - 但是由于你必须创建一些对象来存储每个连接操作的结果,所以更难。所以我只是让编译器为你做这件事。