ユーザーをIDを主キーとする一般ユーザーのデータ(名前、電子メール...)を含むデータベースにします。SQLサーバーから、購入したすべてのアプリケーション(マッピングテーブル)の一覧を含むユーザーの一覧を抽出します。
Applications
は、IDを主キーとするアプリケーション(名前、開発者...)のリストを格納するデータベースとします。
UsersApps
をプライマリキーを使用して2つの間のマッピングテーブルにします。 UsersAppsはこのようにして..., {102, user1_Id, appA_Id}, {103, userN_ID, appB_Id}, {104, user1_Id, appC_Id}, ...
の行を格納します。
は、私は、ユーザーデータの一覧を取得したい{name, email, List<Application> boughtApps}
私はそれを行うためのLINQの要求を見つけるのに苦労していると私は、二つのステップでそれを行う大きなテーブルを取得し、各ユーザーのリストを構築しようとしていますのアプリケーションの。
var q1 = from user in _dbContext.Users
join appUti in _dbContext.AppUsers on user.Id equals appUti.UsersId
join app in _dbContext.Applications on appUti.ApplicationId equals app.Id
orderby user.Id
select new UserDataWithApp { Id = user.Id, Name = user.Name, firstName= user.FirstName, Email = user.Email, App = app };
次に、q1.toList()
を解析して、必要な結果リストを作成します。
var qRes = q1.ToList();
int i = 0;
int j = 0;
while (i<qRes.Count())
{
listUsersWithApps[j] = qRes[i];
while (qRes[i].Id == listUsersWithApps[j].Id) // llist is ordered !!
{
listUsersWithApps[j].Apps.Add(qRes[i].Apps[0]);
i++;
}
j++;
}
良い方法はありませんか?
あなたは次のことを許可するようにナビゲーションプロパティを使用することができます
申し訳ありませんが、私は得ることはありません流暢なAPIからあなたの1つのライナーまで:(とにかく、私はDBを再構成することはできません、私は自動発電機を使用しました。 – Poutrathor
最初のリンクの例を理解してみてください。 linqクエリに集中しないでください、それはそれほど重要ではありません。データベース構造を変更する必要はありません。私はいくつかの詳細を追加する私の投稿を編集します。 –