【问题标题】:Linq to SQL and selecting user's projects in ASP.NET MVC 5 IdentityLinq to SQL 并在 ASP.NET MVC 5 Identity 中选择用户的项目
【发布时间】:2015-01-21 13:28:49
【问题描述】:
我是 LINQ to SQL 和 ASP.NET MVC 的新手。我有一个项目,我在默认身份模型中添加了一个 Project 表。我还在我的 AspNetRoles 默认表中添加了一个 Project_ID 列。所以,我的 AspNetRoles 表现在看起来像:
我的 Project 表看起来像:
我想做什么:
- 用户登录网站后得到所有项目,他正在参与。
- 需要根据该用户拥有的角色来检测用户的项目。
编写 SQL 查询并不难,但我想使用 LINQ to SQL。说实话,我不知道如何根据他的角色选择当前用户正在参与的项目。可以帮忙吗?
【问题讨论】:
标签:
c#
asp.net
.net
asp.net-mvc
linq
【解决方案1】:
这个查询应该有效,它会返回项目记录:
var user_project = from role in AspNetRoles.Where(x => x.Id == UserRoleId)
from project in Projects.Where(x => x.ID == role.Project_ID)
select project;
// UserRoleId holds logged-in role id.
【解决方案2】:
如果您使用 LINQ to SQL,您的数据上下文可能有两个类 AspNetRoles 和 Projects,因此您的查询如下所示:-
from t1 in Projects
join t2 in AspNetRoles on t1.ID equals t2.Project_ID
where (your conditions here....)
select new { t1.field2, t2.field3....}
【解决方案3】:
假设您没有使用只读上下文,如果您有一个 AspNetRoles 对象并且它正确关联到您的 dbml 中的 Project,它将有一个名为 Projects 的成员变量,这是一个与AspNetRoles 关联的所有Projects 的集合,可以像任何其他集合一样调用:
AspNetRole user = (from x in context.AspNetRoles where x.ID == currentUserId select x).SingleOrDefault();
var allProjects = user.Projects;
如果没有构造对象,也可以通过如下语句获取:
var userProjects = from x in context.Projects where userID == x.AspNetRoleID select x
//You haven't specified what the foreign key field name is
我记得这两个都返回IEQueryables,它们使用延迟执行,因此在您尝试通读它们之前它们实际上可能不包含值,因此如果您想要在阅读之前可以编辑的内容,则需要使用@987654329 @ 或类似的东西。
我相信你也可以使用扩展方法来实现这一点,IE:
var userProjects = context.Projects.Where(x => x.AspNetId == UserID);