我有IQueryable
个问题对象q。
DataClasses1DataContext dc = new DataClasses1DataContext();
var q = from a in dc.GetTable<Questions>()
select a ;
有问题我有questionId
和question
。
如何根据下一个IQueryable
按顺序循环遍历button click event
数据,以便我将第一个问题文本设为Lebel.Text
,并将DropDown
答案基于questionId
点击下一个问题后,我转到IQueryable
的第二个问题并继续这样直到完成问题?
答案 0 :(得分:2)
var enumerator = q.AsEnumerable().GetEnumerator();
In event handler:
if(enumerator.MoveNext())
{
var question = enumerator.Current;
}
答案 1 :(得分:0)
ctor()
{
DataClasses1DataContext dc = new DataClasses1DataContext();
var q = from a in dc.GetTable<Questions>()
select a;
_questionEnumerator = q.GetEnumerator();
}
void btn_click(object sender, EventArgs args)
{
if (_questionEnumerator.MoveNext())
{
var row = _questionEnumerator.Current;
// do stuff
}
}
答案 2 :(得分:0)
通常,直接使用Enumerator
。
如果您需要即时获取问题,请在每次用户按下按钮时发出数据库请求:
Question question;
using (dataContext = new DataClasses1DataContext())
question = dataContext.GetTable<Questions>().Skip(questionIndex).First();
如果您需要可以将所有问题保存在内存中,只需将它们全部投射到应用程序的内存中:
IList<Question> questions;
using (dataContext = new DataClasses1DataContext())
questions = dataContext.GetTable<Questions>().ToList();
此外,保持SQL(或任何其他数据库)连接的保持活动超过其需要,这是一个不好的做法。有几十个原因,其中最流行的是表在读取内部时默认的C#事务实现可以对该表进行锁定,使其无法处理其他请求。