如何转换ASP.NET会话以取回列表?

时间:2011-12-13 14:00:37

标签: c# asp.net linq webmatrix

背景:我有两个网页,一个是事物列表,另一个是事物的细节。在列表中,用户可以进行筛选和排序,从而生成排序列表。在细节上,我希望用户有下一个和上一个导航。

我正在使用带有Razor的ASP.Net网页,使用WebMatrix或Visual Studio进行编辑。列表页面上的代码很简单。 RefID是一个整数键唯一标识记录:

var db = Database.Open("dbname");
...
var q = db.Query( sqlthatworks , passInVarables);
Session["WorkingList"] = q.Select( x => new { x.RefID } );

在详细信息页面上,我需要能够访问Session [“WorkingList”],以便我可以将此StackOverFLow问题提供的Linq用于find the next and previous records,这将类似于:

var workingList = (IEnumerable<dynamic>) Session["WorkingList"];
var nextRecord = workingList.SkipWhile(i => i.RefID != currentRecord).Skip(1).First();

我知道db.Query returns a IEnumerable< Object>,但我猜测真正回归的是IEnumerable&lt;动态&gt;。这有效,但似乎过于复杂。还有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

最好为RefID值创建一个类。这将允许您这样做:

public class RefContainer {
    // maybe RefID is not an int...?
    public Int32 RefID { get; set; }
}

Session["WorkingList"] = q.Select(x => new RefContainer { RefID = x.RefID });

var workingList = Session["WorkingList"] as IEnumerable<RefContainer>;
if (workingList != null) {
    var nextRecord = workingList
        .SkipWhile(i => i.RefID != currentRecord)
        .Skip(1).First();
}

答案 1 :(得分:2)

适合我:

Session["nnnn"] as List<double[]>;