从Session变量获取值

时间:2015-03-02 12:01:04

标签: c# asp.net-mvc model-view-controller linq-to-sql session-variables

我有这段代码

var myList = (from p in db.Full
              where ((p.date_reception > begin & p.date_reception < end & !p.mc_host_class.Contains("NULL")) &
                    (!strListe.Contains(p.mc_host_class)))
              group p by p.mc_host_class into g
              orderby g.Count() descending
              select new
              {
                  hostclassx = g.Key,
                  countx = g.Count()
              }).Take(10).ToList();           

HttpContext.Current.Session["allList"] = myList;

我希望在使用会话变量之前从我的会话变量中获取两种类型的值

object[] ys = myList.Select(a => (object)a.countx.ToString()).ToArray();
List<String> xs = new List<string>();

foreach (var x in myList.Select(i => i.hostclassx))
{
        xs.Add(x);
}

我想从我的会话变量

中获取相同类型的变量(xs和ys)

1 个答案:

答案 0 :(得分:0)

您已在会话中存储了匿名对象。匿名对象不打算离开当前方法的边界。首先定义一个模型:

public class MyModel
{
    public string HostClass { get; set; }
    public int Count { get; set; }
}

然后将您的查询投影到此对象中(请记住,您可能需要根据需要调整HostClass属性的类型 - 我已将其定义为字符串,但在您的特定模型中它可能在其他类型中,从目前为止粘贴的代码中查询涉及的对象类型尚不清楚):

...
orderby g.Count() descending
select new MyModel
{
    HostClass = g.Key,
    Count = g.Count()
}).Take(10).ToList();

好的,现在你的List<MyObject>内存有Session["allList"]。因此,为了在代码中的其他位置检索此值,只需回滚到同一类型:

var list = (List<MyModel>)HttpContext.Current.Session["allList"];

作为附注,你似乎在你的where谓词中使用了&运算符而不是&&,也许你并不想使用它。您似乎混淆了logical AND运算符和binary AND运算符。