1

我有一个IQueryable问题的对象 q。

  DataClasses1DataContext dc = new DataClasses1DataContext();
        var q = from a in dc.GetTable<Questions>()
                select a ;

有问题我有questionIdquestion

在此处输入图像描述
IQueryable我如何根据下一个顺序 遍历数据,button click event以便我有第一个问题文本作为Lebel.Text我的DropDown答案questionId,然后在单击下一个问题后我转到第二个问题IQueryable并像这样继续直到完成所有问题?

4

3 回答 3

2
var enumerator = q.AsEnumerable().GetEnumerator();

In event handler:

if(enumerator.MoveNext())
{
      var question = enumerator.Current;
}
于 2013-01-12T14:35:36.097 回答
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# 事务实现中读取表时,可能会锁定该表,使其无法处理其他请求。

于 2013-01-12T14:48:18.150 回答
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
    }    
}
于 2013-01-12T14:35:56.270 回答