0

我有用户与证书的一对多关系。在我看来,我能够看到来自证书的所有数据和来自用户的相关数据。但是,此视图使我重复了 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());

我从上面的代码中得到了不同的用户。当我尝试从 Certificates 类中包含时,这是我无法使其工作的地方。我需要包含证书,以便我可以从该实体获得相关的值。我希望我说清楚了。

这是我需要的一部分。单击详细信息时,必须传递用户 ID 并显示其详细信息。目前我已经硬编码了 id 23。如何将用户 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 的原因是因为您正在查询证书实体,正如您自己所说,它与用户具有 am:1 关系。如果您的视图是主子类型的表单,并且您希望每个用户只看到一行,请反过来执行查询:

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

在您看来,您可以根据需要遍历每个用户的证书集合。例如,根据您的视图设计,您可能只想显示一个选定用户的证书。

于 2012-11-19T19:06:03.443 回答