如何查询(LINQ)多表关联链接?

如何查询(LINQ)多表关联链接?,linq,Linq,我有一些表关联,例如(CaseClient是一个桥接表): Cases有很多客户 客户有许多案例客户 ClientType有许多CaseClient 最简单的方法就是在数据库中使用视图,但我听说有了linq,您可以以某种方式加入它?或者我应该在数据库中创建视图,然后linq查询重新生成该视图 非常感谢您的评论我认为您希望使用Join方法,从桥接表中解决每个关系。例如 // Where CaseId and TypeId are your members of CaseClient var x

我有一些表关联,例如(CaseClient是一个桥接表):

  • Cases有很多客户
  • 客户有许多案例客户
  • ClientType有许多CaseClient
最简单的方法就是在数据库中使用视图,但我听说有了linq,您可以以某种方式加入它?或者我应该在数据库中创建视图,然后linq查询重新生成该视图


非常感谢您的评论

我认为您希望使用Join方法,从桥接表中解决每个关系。例如

// Where CaseId and TypeId are your members of CaseClient
var x = caseClients.Join( cases, cc => cc.CaseId, c => c.Id)
                                .Join( types, cc => cc.TypeId, t => t.Id)
                                .Select();

以上代码未经测试(到目前为止)且来自内存。您可能需要在两个连接之间进行选择。

这里是我为一个非常相似的情况所做的调整。为了保护无辜,只改变了名字

IEnumerable<Case> getCaseByClient(int client_id)
{
    var ret = from c in Cases
              join cc in CasesClients
                on c.Id equals cc.ClientId
              join cl in Clients
                on cc.ClientId equals client_id
              select c;
    return ret;
}
IEnumerable getCaseByClient(int-client\u-id)
{
var ret=案例中的c
在CasesClients中加入cc
在c.Id上等于cc.ClientId
加入客户群
在cc.ClientId等于client_id
选择c;
返回ret;
}
当然,这假设您的client_id字段是int,但这很容易修改。

Select是不必要的(如果我没记错的话,可能是错误的),除非您有一个选择函数,可以提取连接列的某些子集。