0

ユーザーと証明書の関係は1対多です。私の見解では、証明書からのすべてのデータとユーザーからの関連データを見ることができます。ただし、このビューではUserIDが繰り返されるため、効果的ではありません。まず、こちらの質問をご覧ください。

このビューでは、このクエリを使用しました

var certUser = var cert = db.Certificates.Include(c => c.Users);
var AllcertUser = from s in certUser select s;
return View(AllcertUser.ToList());

UserIDは、このLINQコードでこのコントローラーとは異なるため、次のようになります。

 var Allusers = from s in db.Users
                       select s;
 return View(Allusers.ToList());

上記のコードから個別のユーザーを取得します。証明書クラスからインクルードしようとすると、これが機能しません。関連するエンティティからの値を取得できるように、証明書を含める必要があります。私は自分自身を明確にしたいと思います。

これは私が必要としているものの一部です。[詳細]をクリックすると、UserIDを渡して、詳細を表示する必要があります。現時点では、ID23をハードコーディングしています。証明書の詳細を取得するためにユーザーIDを詳細ビューに渡す方法。

 public ActionResult Details(int id)
    {
        cpdEntities db = new cpdEntities();

        var UserCerts = db.Certificates.Where(x => x.UserID == 23).ToList();
        return View(UserCerts);
    }
4

2 に答える 2

1

私が正しく理解している場合は、テーブルを結合して、ユーザーごとにグループ化されたすべての証明書を返したいと考えています。

var query = from u in db.Users
            join c in db.Certificates on u.UserID equals c.UserID into g
            select new { User = u, Certificates = g };

または、証明書を事前にロードすることもできます (遅延ロードが無効になっている場合)。

var query = db.Users.Include(u => u.Certificates);
于 2012-11-19T06:51:22.610 に答える
1

複数の UserId が表示される理由は、Certificate エンティティをクエリしているためです。これは、自分で言ったように、ユーザーと am:1 の関係があります。ビューがマスター-チャイルド タイプのフォームで、ユーザーごとに 1 つの行のみを表示する場合は、クエリを逆に実行します。

var users = db.Users.Include(u => u.Certificates);

ビューでは、必要に応じて各ユーザーの証明書コレクションを反復処理できます。たとえば、ビューのデザインによっては、選択した 1 人のユーザーの証明書だけを表示したい場合があります。

于 2012-11-19T19:06:03.443 に答える