C# 如何使用LINQ获取最后一条记录?
即使有类似的问题和答案,但我无法让它工作。 我想显示最后一条记录,我指的是我表格中的最后一名员工,并在dataGridview中显示他/她 名字、姓氏等等。当我在windows窗体中重新加载此函数时,会出现此错误 “索引超出范围。必须为非负且小于集合的大小” 这是我的代码,不工作。先谢谢你C# 如何使用LINQ获取最后一条记录?,c#,winforms,linq,datagridview,C#,Winforms,Linq,Datagridview,即使有类似的问题和答案,但我无法让它工作。 我想显示最后一条记录,我指的是我表格中的最后一名员工,并在dataGridview中显示他/她 名字、姓氏等等。当我在windows窗体中重新加载此函数时,会出现此错误 “索引超出范围。必须为非负且小于集合的大小” 这是我的代码,不工作。先谢谢你 var employee = db.Employees. OrderByDescending(s =>s.EmployeeId).
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;
}
将方法从first更改为FirstORDefault
var employee = db.Employees.
OrderByDescending(s =>s.EmployeeId).
Select(b => new
{
Id = b.EmployeeId,
FirstName = b.FirstName,
LastName = b.LastName,
Birthday = b.BOF
}).FirstORDefault();
employee!=如果使用First()
,则null
无效-阅读dgvEmployee.Columns[0]上得到异常。Visible=false代码>。如果调试代码,您会注意到dgvEmployee.Columns[0]
为空
构建一个数据表并使用此代码 私有void Form1\u加载(对象发送方、事件参数e) { var db=新的linqDataContext()
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();
哪一行引发异常?调试该“服务”数据源。确保DGVEMPPLOYEE有列。该标题与您的问题不完全匹配。我建议您逐步检查代码,找出错误的具体引发位置,并使用
FirstOrDefault()
First()
如果序列中没有元素,将抛出一个InvlidOperationException
。@JohnG,很抱歉我输入了错误的文本,我刚刚从服务编辑到了员工,但仍然是相同的错误您得到了最后一条记录,但您稍后失败。这是一个太明显的问题,只需调试即可。dgvEmployee.Columns[0]
-可能是您的问题,网格没有刷新行。感谢您的回复,第一个有。Take(1)givs me错误,Dbset,DbQuery..不支持,另一个givs me empty,没有数据重新计算givs me empty GridView,但是如果我使用Tolist()而不是FirstOrDefautl()然后我让所有员工感谢您的回复,但是这个FirstOrDefault()givs me empty,没有数据重新处理givs me empty GridView,但是如果我使用Tolist()而不是FirstOrDefault()的话然后我会让所有的员工欢迎你!我建议你在回答时,解释一下代码的作用,以便让OP了解其原始问题/代码的错误!继续发布精彩的答案,谢谢!
var employee = db.Employees.
OrderByDescending(s => s.EmployeeId).
Select(b => new
{
Id = b.EmployeeId,
FirstName = b.FirstName,
LastName = b.LastName,
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());
}
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();