2

假设我有一个使用 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;
   }
4

2 回答 2

0

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

 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 来表示您的列表(类似于此或更深入地了解),然后瞧!

于 2012-10-03T20:39:19.240 回答
0

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

        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);
于 2012-10-03T14:59:03.343 回答