我有一对多的用户与证书的关系。在我看来,我能够看到来自用户的证书和相关数据的所有数据。但是这个视图让我重复了UserID并且无效。请先查看此问题here。
在此视图中,我使用了此查询
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并显示其详细信息。目前我有硬编码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);
}
答案 0 :(得分: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);
答案 1 :(得分:1)
您看到多个UserIds的原因是您正在查询证书实体,正如您所说,它与用户有m:1的关系。如果您的视图是主子类型表单,并且您希望每个用户只能看到一行,那么请执行相反的查询:
var users = db.Users.Include(u => u.Certificates);
在您的视图中,您可以根据需要迭代每个用户的证书集合。例如,根据视图的设计,您可能只想显示一个所选用户的证书。