Linq:在allready连接表上包含连接

时间:2013-02-07 10:14:13

标签: c# mysql linq

我想知道Linq是否可以这样做: 我有三张桌子:

Request
--id
--Adress
--Description
Nav.Properties:
-- RequestStatus

RequestStatus
--RequestId
--PubDate
--StatusTypeId
Nav.Properties:
-- Request
-- StatusType

StatusType
--Id
--StatusTypeDescription
Nav.Properties
-- RequestStatus

在Linq中,我可以设法将前两个表连接在一起:

var RequestWithStatus = dbContext.Requests.Include("RequestStatus").ToList<fullRequest>();

但是......我想要的是此查询中还包含StatusTypeDescription列(因此在第三个表上使用连接)。

1 个答案:

答案 0 :(得分:0)

如果Request实例可以有一个RequestStatus,而RequestStatus实例可以有一个StatusType,那么你可以简单地执行

var requestList = dbContext.Requests.Include("RequestStatus.StatusType").ToList();

还包含Include的“lambda”(Expression&gt;)重载(在System.Data.Entity中)(不确定它是否适用于mysql)

var requestList = dbContext.Requests.Include(m => m.RequestStatus.StatusType).ToList();

所有数据都将出现在列表中(急切加载)。

然后您可以访问说明

var firstRequest = requestList.First();
var requestDescription = firstRequest.Description;
var statusTypeDescription = firstRequest.RequestStatus.StatusType.Description;

或更安全

var statusTypeDescription = firstRequest.RequestStatus != null && firstRequest.RequestStatus.StatusType != null 
          ? firstRequest.RequestStatus.StatusType.Description
          : string.Empty;