c#检查datagridview列是否包含值&;linq First()与FirstOrDefault()的比较
我需要检查c#检查datagridview列是否包含值&;linq First()与FirstOrDefault()的比较,c#,linq,datagridview,C#,Linq,Datagridview,我需要检查DataGridView中的第一列是否包含值10 我用过这个 int index = -1; index = (dgv.Rows.Cast<DataGridViewRow>() .Where(r => r.Cells[0].Value.Equals(10)) .Select(r => r.Index)).First(); 致以最诚挚的问候,: 返回序列的第一个元素。 第一个(IEnumerable)方法在以下情况
DataGridView
中的第一列是否包含值10
我用过这个
int index = -1;
index = (dgv.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells[0].Value.Equals(10))
.Select(r => r.Index)).First();
致以最诚挚的问候,:
返回序列的第一个元素。
第一个(IEnumerable)方法在以下情况下引发异常
源不包含任何元素。在
源序列为空,请使用FirstOrDefault方法
返回序列的第一个元素,,如果否,则返回默认值
元素已找到
尝试使用FirstOrDefault()
:
另一种选择是:
int index;
var row = dgv.Rows.Cast<DataGridViewRow>().FirstOrDefault(r => r.Cells[0].Value == 10);
if (row != null)
index = row.Index;
else
index = -1; // or whatever you want
int索引;
var row=dgv.Rows.Cast().FirstOrDefault(r=>r.Cells[0].Value==10);
如果(行!=null)
索引=行索引;
其他的
索引=-1;//或者你想要的任何东西
我需要检查DataGridView中的第一列是否包含值10
作业的正确工具(方法)是.Any
,如果集合中的任何项满足给定条件,则返回true
;如果不满足给定条件或集合为空,则返回false
if (dgv.Rows.Cast<DataGridViewRow>().Any(r => r.Cells[0].Value.Equals(10)))
{
// exists
}
else
{
// not exist
}
使用.DefaultIfEmpty
您可以“告诉”代码的读者您的实际意图,而无需附加条件或空传播程序。由于在返回空集合时提供默认值,所以可以安全地使用
.First()
方法,因为至少会返回一个项
要查找给定值的所有匹配项,请不要使用
First
或First或default
如果我正确理解了您的问题,则您尝试分配满足条件的第一个索引值,如果没有记录,则将-1
分配给索引
要解决此问题,可以使用运算符with,如
int index=dgv.Rows.Cast()
.FirstOrDefault(r=>r.Cells[0]。Value.Equals(10))?.Index
?? -1.
您的意思是说,如果第一行的第一列包含值10,则将其索引指定给索引
变量,否则将其指定为0。请用一些测试数据和预期输出详细说明您的问题。我不理解OP的意思,这是可行的,但如果第一行的第一列包含值10,或者没有第一列包含值10的行,则变量索引的值为0。你是如何解释这句话来回答问题的。可能是我遗漏了一些东西,如果您的答案解释了OPs问题的解决方案,那就太好了。您的更新没有澄清问题是哪个OPfacing@PrasadTelkikar我在我的答案中添加了一个例子,也许会clarify@PrasadTelkikar我认为法比奥做出了最好的回答:)
int[] numbers = { };
int first = numbers.First(number => number > 800); // OUTPUT: Sequence contains
// no matching element
int index;
var row = dgv.Rows.Cast<DataGridViewRow>().FirstOrDefault(r => r.Cells[0].Value == 10);
if (row != null)
index = row.Index;
else
index = -1; // or whatever you want
if (dgv.Rows.Cast<DataGridViewRow>().Any(r => r.Cells[0].Value.Equals(10)))
{
// exists
}
else
{
// not exist
}
var index = dgv.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells[0].Value.Equals(10))
.Select(r => r.Index)
.DefaultIfEmpty(-1)
.First();
int index = dgv.Rows.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.Cells[0].Value.Equals(10))?.Index
?? -1;