1

私はこれに近いことを知っています...

私の構造は次のとおりです。

私にはいくつかの会社があります各会社にはプライマリユーザー(アカウント)とすべてのユーザー(アカウント)のリストがあります。

これをデータベースに、Accountsテーブルの外部キーとして「Primary」を持つcompanysテーブルとして実装しました。また、Accountsテーブルには、Companiesテーブルの外部キーであるCompanyIdがあります。

したがって、プライマリユーザーは1人だけで、各ユーザーは1つの会社に関連付けられています。

すべての会社のリストを取得して、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」は同じ公開名を持っています。それらを区別するために相関名を使用します。

これは、各結合に名前を付ける必要があることを意味すると思います(たとえば、「join a on a = b asc」のようなSQLを作成するため)が、そのための構文が見つかりません。誰か知ってる?

4

1 に答える 1

2

.Asメソッドを使用してテーブル名のエイリアスを作成できます。それに加えて、Joinメソッドにはout、エイリアステーブルへの参照を動的変数に入れるオプションの2番目のパラメーターがあります。テーブルの参照が簡単になります。

だからこれを試してみてください:

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 に答える