2017-06-07 5 views
0

ユーザーを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++; 
    } 

良い方法はありませんか?

あなたは次のことを許可するようにナビゲーションプロパティを使用することができます

答えて

1

var userApps = context.Users.Select(u => new UserWithApp(u.Name, u.Email, u.Applications)) 

だけUserに次に追加します。

public virtual ICollection<Application> Applications { get; set; } 

Applicationへ:

public virtual ICollection<Users> Users { get; set; } 

ですから、「缶エンティティ間をナビゲートして、次のクエリに書き込みます(ju ST)あなたの順序を適応させ、どのようなユーザーデータがseletedされる:

var userApps = from user in context.Users 
       select new UserDataWithApp { ..., BoughtApps = user.Applications } 

の例は、ここを参照してください:http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

または別の興味深いブログ:あなたは行き​​ましたかhttps://lostechies.com/jimmybogard/2014/03/12/avoid-many-to-many-mappings-in-orms/

+0

申し訳ありませんが、私は得ることはありません流暢なAPIからあなたの1つのライナーまで:(とにかく、私はDBを再構成することはできません、私は自動発電機を使用しました。 – Poutrathor

+0

最初のリンクの例を理解してみてください。 linqクエリに集中しないでください、それはそれほど重要ではありません。データベース構造を変更する必要はありません。私はいくつかの詳細を追加する私の投稿を編集します。 –

関連する問題