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

时间:2009-01-10 10:38:06

标签: linq

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

  • 案例有很多CaseClients
  • 客户有许多CaseClients
  • ClientType有许多CaseClient

最简单的方法就是在数据库中使用视图,但我听说linq你可以加入这个吗?或者我应该在数据库中创建视图并再次查看该视图的linq查询?

感谢您的评论

2 个答案:

答案 0 :(得分:1)

我认为您希望使用Join方法,从桥接表中解析每个关系。 E.g。

// 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();

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

答案 1 :(得分:0)

这是对我在非常相似的情况下所做的改编。只有名字被改变以保护无辜者。

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;
}

当然这假设你的client_id字段是一个int,但这很容易修改。