我有这段代码
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)答案 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
运算符。