我知道我很接近这个。。。
我的结构是:
我有一些公司每个公司都有一个主要用户(帐户)以及所有用户(帐户)的列表。
我已经在数据库中实现了这一点,将"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;
}
这应该很好。