我有一个数据网格视图和一个数据表。 我正在对数据表执行LINQ查询,并且我想选择LINQ查询过滤的特定行。最好的方法是什么? 谢谢!
var emp = (from x in dtRoles.AsEnumerable()
where x.Field<string>("ID")==txtEmp.Id
select x).FirstOrDefault();
if (emp != null)
{
//select the specific row in dgvRoles
}
答案 0 :(得分:1)
如果要选择DataGridView
中的行,只需更改查询即可在DataGridView.Rows
上进行搜索。
为此,您可以使用DataBoundItem
中的DataGridViewRow
,这是该行中显示的对象。如果您使用DataTable
作为控件的数据源,则数据绑定项将为DataRowView
。因此,您可以使用以下查询:
var row = dataGridView1.Rows.Cast<DataGridViewRow>()
.Where(x=>!x.IsNewRow)
.Where(x => ((DataRowView)x.DataBoundItem).Row.Field<string>("Id") == "1")
.FirstOrDefault();
if (row != null)
row.Selected = true;
如果出于任何原因要开始在DataTable
上进行搜索,请首先找到DataRow
,然后在Rows
的{{1}}之间搜索以找到该行:< / p>
DataGridView
答案 1 :(得分:0)
这可以通过扩展FirstOrDefault
来简化。通过与Lambda
一起使用,我们可以获得特定的行。
var result = dtRoles.AsEnumerable().FirstOrDefault(x => x.Field<string>("ID")== "Sample");//Returns a DataRow
或者,无需将DataTable
转换为Enumerable
,我们可以使用DataTable.Select
过滤特定行。在这种情况下,返回类型为DataTable
。
var result = dtRoles.Select("ID = 'Sample'"); //Returns a dataTable
var row = result[0];//Specific row
C# Fiddle用于示例数据