循环顺序对象

时间:2013-01-12 14:29:35

标签: c# winforms linq for-loop iqueryable

我有IQueryable个问题对象q。

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

有问题我有questionIdquestion

enter image description here
如何根据下一个IQueryable按顺序循环遍历button click event数据,以便我将第一个问题文本设为Lebel.Text,并将DropDown答案基于questionId点击下一个问题后,我转到IQueryable的第二个问题并继续这样直到完成问题?

3 个答案:

答案 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#事务实现可以对该表进行锁定,使其无法处理其他请求。