【问题标题】:Deep LINQ projections, how?深度 LINQ 预测,如何?
【发布时间】:2012-10-03 14:44:31
【问题描述】:

假设我有一个使用 EF 4.0 创建的模型

  • 用户

    • 角色

      • 权限

每个实体都有一个 DeleteDate 属性。

我想获取一个特定用户(名称 =...)并让树中充满 DeletedDate == null..的项目。

这必须使用匿名类型投影作为结果,但我不知道如何使用比 2 更深的层次结构来完成此操作..

这是我已经拥有的:

    public MyProjection MyCall(string givenName)
    {
      var result = from s in context.Users
                   where (s.Name == givenName &&
                                    s.DeletedDate == null)
                             select new
                             {
                                 s,
                                 roles = from r in s.Roles
                                         where r.DeletedDate == null
                                         select r
                             };

      var outcome = result.FirstOrDefault();

      if (outcome != null)
      {
         var myProjection = new MyProjection()
         {
             User = outcome.s,
             Roles = outcome.roles
         };

         return myProjection;
       }

    return null;
   }

【问题讨论】:

  • 第三级:以列表形式返回每个角色的所有权限......

标签: linq entity-framework


【解决方案1】:

根据您的结构,您可以执行以下操作:

        var result = m.Users.Where(u => u.DeletedDate == null)
            .Select( u => new
                            {   
                                u,
                                roles = u.Roles.Where(r => r.DeletedDate == null)
                                               .Select(r => new
                                                   {
                                                        r,
                                                        permissions = r.Permissions.Where(p => p.DeletedDate == null)
                                                   })
                            }).FirstOrDefault(item => item.u.Name == givenName);

【讨论】:

  • 我如何获得一个特定用户、角色和每个角色的权限?
  • 我已更新代码以选择特定用户 - 但是我不明白您所说的“使用角色和每个角色权限”是什么意思
  • 问题更多的是如何从用户 -> 角色 -> 权限获取树,然后基于删除日期过滤器。我想将这个具有角色的用户树和每个角色的权限返回给 UI...
【解决方案2】:

如果您使用以下内容检索:

 var result = from s in MyUsers
              where s.DeletedDate == null
              select new aUser{
                   Roles = (from r in s.Roles
                            where r.DeletedDate == null
                            select r).ToList()
              };

然后创建一个TreeView:

 TreeView treeView = new TreeView();

然后将TreeView的ItemsSource设置为IEnumerable:

 treeView.ItemsSource = result;

然后在您的 TreeView 中构建一个 HierarchicalDataTemplate 来表示您的列表(similar to this 或更深入的this),然后瞧!

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2023-04-08
    相关资源
    最近更新 更多