简单.数据-如何在同一个表上双向联接两次



我知道我很接近这个。。。

我的结构是:

我有一些公司每个公司都有一个主要用户(帐户)以及所有用户(帐户)的列表。

我已经在数据库中实现了这一点,将"Primary"作为Accounts表的外键,Accounts表有CompanyId作为companies表的主键。

因此,只有一个主要用户,每个用户都与一家公司关联。

我想检索所有公司的列表,并将它们放入一个c#对象中。到目前为止,我拥有的是:

public IEnumerable<Company> GetAllCompaniesList()
    {
        var allData = database.Companies.All()
            .Join(database.Accounts).On(database.Accounts.Id == database.Companies.Primary)
            .Join(database.Accounts).On(database.Accounts.CompanyId == database.Companies.Id)
            .ToList<Company>();
        return allData;
    }

在我的测试中,它使用了一个设置了相关密钥的内存适配器,但在实际版本中不起作用,与一起崩溃

FROM子句中的对象"dbo.Accounts"one_answers"dbo.Accounts"具有相同的公开名称。使用关联名称来区分它们。

我认为这意味着我需要为每个联接命名(例如,使sql类似于"joina on a=b as c"),但我找不到这样做的语法。有人知道吗?

您可以使用.As方法对表名进行别名。除此之外,Join方法还有一个可选的第二个out参数,它将对别名表的引用放在动态变量中;这只会让查阅表格变得更容易。

所以试试这个:

public IEnumerable<Company> GetAllCompaniesList()
{
    dynamic primary;
    var allData = database.Companies.All()
        .Join(database.Accounts.As("PrimaryAccounts"), out primary)
            .On(primary.Id == database.Companies.Primary)
        .Join(database.Accounts)
            .On(database.Accounts.CompanyId == database.Companies.Id)
        .ToList<Company>();
    return allData;
}

这应该很好。

相关内容

  • 没有找到相关文章

最新更新