问题描述
即使对此有类似的问题和答案,但我无法使它起作用。 我想显示最后一条记录,我的意思是我表中最近的雇员,并在dataGridview中显示他/她 名,姓等。当我以Windows窗体重新加载此功能时,会出现此错误
“索引超出范围。必须为非负数并且小于集合的大小”
这是我的代码,无法正常工作。预先谢谢你
var employee = db.Employees.
OrderByDescending(s =>s.EmployeeId).
Select(b => new
{
Id = b.EmployeeId,FirstName = b.FirstName,LastName = b.LastName,Birthday = b.BOF
}).First();
if(employee != null)
{
dgvEmployee.DataSource = employee;
dgvEmployee.Columns[0].Visible = false;
}
解决方法
var employee = db.Employees.
OrderByDescending(s =>s.EmployeeId).
Select(b => new
{
Id = b.EmployeeId,FirstName = b.FirstName,LastName = b.LastName,Birthday = b.BOF
}).take(1);
or
var employee = db.Employees.
OrderByDescending(s =>s.EmployeeId).
Select(b => new
{
Id = b.EmployeeId,Birthday = b.BOF
}).FirstORDefault();
both are works
,
将方法从第一个更改为FirstORDefault。
var employee = db.Employees.
OrderByDescending(s =>s.EmployeeId).
Select(b => new
{
Id = b.EmployeeId,Birthday = b.BOF
}).FirstORDefault();
,
-
employee != null
如果您使用First()
则毫无用处-了解How does First work - 我认为,您在此行
dgvEmployee.Columns[0].Visible = false;
上遇到异常。如果您调试代码,则会注意到dgvEmployee.Columns[0]
为空
建立数据表并使用此代码。
,私有无效Form1_Load(对象发送者,EventArgs e) { var db = new linqDataContext();
var employee = db.Employees. OrderByDescending(s => s.EmployeeId). Select(b => new { Id = b.EmployeeId,Birthday = b.BOF }); DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("FirstName"); dt.Columns.Add("LastName"); dt.Columns.Add("Birthday"); foreach (var item in employee) { var row = dt.NewRow(); row[("ID")] = item.Id; row[("FirstName")] = item.FirstName; row[("LastName")] = item.LastName; row[("Birthday")] = item.Birthday; dt.Rows.Add(row); } MessageBox.Show(dt.Rows[dt.Rows.Count - 1]["ID"].ToString()); }
where
子句以及OrderByDescending和.Take()方法应该可以实现。
var tempFileName = db.Employees
.Where(x
=> x.Id = b.EmployeeId,x.FirstName = b.FirstName,x.LastName = b.LastName,x.Birthday = b.BOF)
.OrderByDescending(x => x.EmployeeId)
.Take(1)
.Select(x => x.FirstName)
.ToList()
.FirstOrDefault();