【问题标题】:How to get back result from a session如何从会话中取回结果
【发布时间】:2013-03-03 04:43:46
【问题描述】:

实体框架工作 vs2010

执行我的 linq 查询后得到一个记录列表,想把这个记录放在会话中。现在从会话想取回我的记录列表,怎么做如何从会话中取回记录

Linq 查询

 public IEnumerable GetSearchUserGroupPermissionData(int userID = 0)
        {
                var query = from p in this.Context.CmnPermissionGroupUsers
                        join q in this.Context.CmnPermissionGroups on p.PermissionGroupID equals q.PermissionGroupID
                        join r in this.Context.CmnPermissionGroupDocs on p.PermissionGroupID equals r.PermissionGroupID
                        join s in this.Context.CmnUserInfoes on p.UserID equals s.UserID
                        join t in this.Context.CmnDocLists on r.DocListID equals t.DocListID
                        //join u in this.Context.CmnModuleFormCompanies on t.ModuleID equals u.ModuleID
                        //join v in this.Context.CmnModuleLists on u.ModuleID equals v.ModuleID
                        //join w in this.Context.CmnFormLists on u.FormID equals w.FormID

                        where p.IsDeleted == false
                        select new
                        {
                            RecordID = p.PermissionGroupUserRecordID,
                            s.UserID,
                            s.UserFirstName,
                            q.PermissionGroupName,
                            p.EffectiveDate,
                            p.StatusID,
                            t.DocListID,
                            t.DocName,
                            t.ModuleID,
                           // v.ModuleName,
                           // u.FormID,
                            //          t.FormName,
                          //  w.FormName,
                            t.ParentID,
                            t.Sequence,
                            t.IsApprovalRequired,
                            t.CompanyCategoryID,                            
                            t.DocTypeID

                            //p.CreateBy,
                            //p.CreateOn,
                            //p.CreatePc,
                            //p.UpdateBy,
                            //p.UpdateOn,
                            //p.UpdatePc,
                            //p.IsDeleted,
                            //p.DeleteBy,
                            //p.DeleteOn,
                            //p.DeletePc,
                            //p.Transfer
                        };   
         return query.WhereIf(userID != 0, w => w.UserID == userID).ToList();    
        }

将结果放入会话中

Session["UserPermission"] = new PermissionGroupUserController().GetSearchUserGroupPermissionData(objEntity.UserID);

现在,想从 session.bellow foreach 语法区域取回记录集,作为一个项目包含每一行所有属性和值,但不能像下面那样在变量中赋值,为什么不能将 AnonymousType 变量值分配给多变的。 var o = Session["UserPermission"] as IEnumerable; //使用强制转换 foreach(o 中的 var 区域) { //int a = area.UserID; }

注意:上面的语法是怎么出错的

message:foreach 语句不能对“object”类型的变量进行操作 因为“对象”不包含公共定义 'GetEnumerator'

如果有任何疑问,请询问。

【问题讨论】:

  • 如果你知道变量o的类型。使用该类型显式转换 Session["UserPermission"]
  • 除了您的会话问题,您应该考虑在此处使用 Membership 和/或 RoleProvider。除了尝试维护安全的应用程序之外,会话管理可能是另一个令人头疼的问题。
  • var o = Session - 和错误foreach statement cannot operate on variables of type 'object' - 您需要将其转换为正确的类型。您拥有它的方式是将对象分配给 var 并尝试对其进行迭代。 我同意 @GlennFerrieLive 的观点,您不应使用 Sessions 获取会员信息。
  • Freddie Fabregas,感谢回复,请检查我的编辑,使用强制转换但现在不能使用 AnonymousType 变量。帮助我使用 AnonymousType 属性

标签: c# .net session foreach ienumerable


【解决方案1】:

你尝试过将o转换成IEnumerable吗?

除此之外,在您的foreach 循环中,您必须使用dynamic 而不是var。这是必需的,因为您的类型是匿名的。

但我仍然强烈建议您使用普通类型而不是匿名类型,至少有两个原因

  1. 代码可重用性。
  2. 更好的代码可读性。

【讨论】:

  • James Poulose,感谢您的回复,是的,我做到了,演员后可以从会话中检索值,但现在面临无法使用 AnonymousType 的问题。请检查我的编辑。
  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • @Kirk 你是对的,我应该在评论部分发表我的建议。但现在我有了 OP 的答案 :-) - 无论如何谢谢。
  • James Poulose 感谢 ,dynamic dt= Session["UserPermission"]; foreach (dt 中的动态项目) { int a = item.UserID;使用动态获取错误消息后:'object'不包含'UserID'的定义
  • @shamim 那是因为您的匿名类型没有属性“UserID”。要解决此问题,请将您的匿名类型创建从“s.UserID”更改为“UserID = s.UserID”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-02
  • 2011-09-09
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2014-11-03
相关资源
最近更新 更多