如何使用EF和linq跨多个表获取数据?

本文关键字:获取 数据 何使用 EF linq | 更新日期: 2023-09-27 18:17:46

我有一个相当简单的数据库结构,TableA连接到TableB连接到TableC,我只是想得到一个linq语句来获得填充的数据对象。为什么这么难?

我有这样的东西

TableA
ID (pk)
TableB
ID
TableAID (yes this is a fk to TableA)
TableCID (yes this is a fk to TableC)
TableC
ID (pk)

现在,我想做一个

var SomeVar = context.Include(t=>t.AnotherTable)
.Include(t => t.YetAnotherTable)
.Include(t => t.TableB)
.Include(t => t.TableC)

或者

.Include(t=>t.TableB.TableC)

但是当我运行这些,什么都没有工作,关于导航道具的错误不存在。我怎么得到这个?任何帮助都会很感激,拜托?!

如何使用EF和linq跨多个表获取数据?

我不知道。include()方法在db上下文本身上工作,所以我可能完全误解了这个问题。

看起来你在考虑SQL JOIN语句,这不是EF的工作方式。让它帮你解决吧。假设TableA, TableB和TableC都有合适的导航属性,然后这样做:

int myKey = 12345;
TableB myObject = context.TableBs.Where(b => b.ID == myKey).First();

此时,变量"myObject"的类型为TableB,并具有如下属性:ID, TableA, TableB。如果TableA有一个名为Name的属性你可以用myobject。TableA。Name访问它。如果您希望在不返回服务器的情况下执行此操作,您可以这样写:

TableB myObject = context.TableBs.Include(b => b.TableA).Where(b => b.ID == myKey).First();

这是"即时加载",但对于从相关表中获取数据来说不是必需的。