C# 数据-如何在同一个表上双向连接两次

C# 数据-如何在同一个表上双向连接两次,c#,asp.net-mvc,simple.data,C#,Asp.net Mvc,Simple.data,我知道我和这个很接近 我的结构是: 我有一些公司 每个公司都有一个主要用户(帐户) 以及所有用户(帐户)的列表 我在db中实现了一个companys表,它将“Primary”作为Accounts表的外键,Accounts表有一个CompanyId,它是companys表的外键 因此,只有一个主用户,每个用户都与一家公司关联 我想检索所有公司的列表,并将它们链接到一个c#对象中。到目前为止,我得到的是: public IEnumerable<Company> GetAllCompani

我知道我和这个很接近

我的结构是:

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

我在db中实现了一个companys表,它将“Primary”作为Accounts表的外键,Accounts表有一个CompanyId,它是companys表的外键

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

我想检索所有公司的列表,并将它们链接到一个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;
    }
public IEnumerable GetAllCompanyList()
{
var allData=database.companys.All()
.Join(database.Accounts).On(database.Accounts.Id==database.companys.Primary)
.Join(database.Accounts).On(database.Accounts.CompanyId==database.companys.Id)
.ToList();
返回所有数据;
}
它在我的测试中使用内存适配器并设置了相关的密钥,但在实际版本中不起作用

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


我认为这意味着我需要命名每个连接(例如,使sql像“a=b上的连接a为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;
}
public IEnumerable GetAllCompanyList()
{
动态初级;
var allData=database.companys.All()
.Join(database.Accounts.As(“primarycounts”),out primary)
.On(primary.Id==database.companys.primary)
.Join(数据库.Accounts)
.On(database.Accounts.CompanyId==database.companys.Id)
.ToList();
返回所有数据;
}

这应该很好。

如果您想检索所有公司的列表,为什么要加入帐户?