MoveNext for List

时间:2015-07-13 15:43:54

标签: c#

我正在尝试创建一个应用程序,您按下下一个按钮,它会显示列表中的下一个对象。在这种情况下,Employee的一个对象,我正在使用Linq To SQL。我读过MoveNext,但我不知道它是如何工作的,我尝试了其他不起作用的东西(下面的代码)。基本上我想要一个下一个/上一个按钮来从db中获取员工。

以下是获取所有员工的代码:

public List<Employee> GetEmployees()
        {
            var q =
                from a in db.GetTable<Employee>()
                select a;

            List<Employee> employeeList = q.ToList();
            return employeeList;
        }

按钮点击:

 private void btnNext_Click(object sender, EventArgs e)
        {
            Increment();
            LoadEmployee();
        }

增量(方法)(这是我获取下一个对象的解决方案,但它根本不是最优的):

public void Increment()
        {
            if (con.GetEmployee(id) != null)
            {
                id++;
            }
            else
            {
                id += 2;
            }
        }

LoadEmployee(方法):

 public void LoadEmployee()
        {
            Employee e = con.GetEmployees().FirstOrDefault(f => f.id.Equals(id));
            tbId.Text = e.id.ToString();
            tbFname.Text = e.Fname;
            tbLname.Text = e.Lname;
            tbDate.Text = e.Date;

        }

2 个答案:

答案 0 :(得分:1)

先生,试试这个

  public void LoadEmployee()
    {
        Employee e = con.GetEmployees();
        tbId.Text = e[id].id.ToString();
        tbFname.Text = e[id].Fname;
        tbLname.Text = e[id].Lname;
        tbDate.Text = e[id].Date;

    }

使用id作为集合的索引

答案 1 :(得分:0)

总结一下:

  • 您正在使用SQL
  • 并希望以'next'/'prev'记录。

如果您在不使用游标的情况下查看SQL本身,我会将其翻译为“skip”和“take 1”。 Linq具有以下功能:

// initialize index
int x = -1;

// move next:
var currentEmployee = context.Employees.Skip(++x).FirstOrDefault();
if (currentEmployee == null) 
{
   // End.    
}

// move prev:
if (--x < 0)
{ 
    // move back past start
    x = 0;
}
var currentEmployee = context.Employees.Skip(x).FirstOrDefault();
if (currentEmployee == null) 
{
   // No elements
}