Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#检查datagridview列是否包含值&;linq First()与FirstOrDefault()的比较_C#_Linq_Datagridview - Fatal编程技术网

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;