我知道我和这个人很接近......
我的结构是:
我有一些公司 每家公司都有一个主要用户(帐户) 以及所有用户(帐户)的列表。
我已在db中将此实现为具有“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”和“dbo.Accounts”具有 相同的暴露名称。使用相关名来区分它们。
我认为这意味着我需要命名每个连接(例如,使sql像“将a = b连接为c”),但我找不到这样做的语法。有人知道吗?
答案 0 :(得分: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;
}
这应该可以正常工作。