在EF中的多个列上连接多个表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在EF中的多个列上连接多个表相关的知识,希望对你有一定的参考价值。

尝试在EF上的多个列上连接多个表时遇到问题。

这是我的SQL查询

SELECT 
    Address,
    AddressName,
    COUNT(AddressCode) AS NumberOfAddress
FROM
    Tbl1
    INNER JOIN Tbl2
    ON Tbl1.AddressID = Tbl2.AddressID2
    INNER JOIN Tbl3 
    ON      (Tbl1.AddressID = Tbl3.AddressID
        AND Tbl2.NewId = Tbl3.NewId)
WHERE
    Tbl2.StartDate >= '2001-01-01'
GROUP BY
    Tbl2.AddressID2,
    Tbl3.AddressID

这是我在EF中的查询(仅适用于加入部分):

var query = from Tbl1 DbContext.Tbl1
            join Tbl2 in DbContext.Tbl2
            on Tbl1.AddressID equals Tbl2.AddressID2 
            join Tbl3 in DbContext.Tbl3 
            on new {Tbl1.AddressID, Tbl2.NewId} equals new {Tbl3.AddressID,Tbl3.NewId}

但它只是不起作用,也没有我在StackOverflow上找到的一些变种。

我怎样才能使它工作?

答案

你可以用它。

在您的代码的第一行in关键字丢失。我修好了它并添加了wheregroup by部件。

var query = from Tbl1 in Tbl1s
            join Tbl2 in Tbl2s
                on Tbl1.AddressID equals Tbl2.AddressID2 
            join Tbl3 in Tbl3s
                on new {Tbl1.AddressID, Tbl2.NewId} equals new {Tbl3.AddressID,Tbl3.NewId}
            where Tbl2.StartDate >= new DateTime(2001,1,1)
            group new {Tbl1, Tbl2} by new {Tbl2.AddressID2, Tbl3.AddressID} into g
            select new { 
                g.Key.AddressID2, 
                g.Key.AddressID, 
                NumberOfAddress = g.Count() }

以上是关于在EF中的多个列上连接多个表的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle DBMS 中的多个列上使用过滤条件连接表

当列数未知时,如何在多个列上连接两个表(pyspark)

使用 OR 和标签连接多个列上的两个表

具有别名的同一列上的多个连接

EF5生成的数据库在存在多个关系时不创建连接表

SQLite 表约束 - 在多个列上唯一