从 Session 变量获取值

Getting values from Session variable

我有这段代码

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)

您在会话中存储了一个匿名对象。匿名对象无意离开当前方法的边界。所以从定义一个模型开始:

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();

好的,现在您的 Session["allList"] 中存储了一个 List<MyObject>。因此,为了在您的代码中的其他地方检索此值,只需转换回同一类型即可:

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

附带说明一下,您似乎在 where 谓词中使用了 & 运算符而不是 &&,也许您并不完全想使用它。您似乎混淆了 logical AND 运算符和 binary AND 运算符。