背景:我有两个网页,一个是事物列表,另一个是事物的细节。在列表中,用户可以进行筛选和排序,从而生成排序列表。在细节上,我希望用户有下一个和上一个导航。
我正在使用带有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;。这有效,但似乎过于复杂。还有更好的方法吗?
答案 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[]>;