【问题标题】: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 表看起来像:

我想做什么:

  1. 用户登录网站后得到所有项目,他正在参与。
  2. 需要根据该用户拥有的角色来检测用户的项目。

编写 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);
        

        【讨论】:

          猜你喜欢
          • 2016-02-04
          • 1970-01-01
          • 2015-03-19
          • 1970-01-01
          • 2016-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多