1

我知道我和这个很接近......

我的结构是:

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

我已经在数据库中将其实现为一个公司表,该表具有“主要”作为 Accounts 表的外键,并且 Accounts 表有一个 CompanyId,它是 Companies 表的外键。

所以只有一个主要用户,每个用户都与一家公司相关联。

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

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”和“dbo.Accounts”具有相同的公开名称。使用相关名称来区分它们。

我认为这意味着我需要命名每个连接(例如,使 sql 像“在 a = b 作为 c 上连接 a”),但我找不到这样做的语法。有人知道吗?

4

1 回答 1

2

您可以使用该.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;
}

那应该可以正常工作。

于 2012-08-24T15:58:08.467 回答