Dat*_*ing 2 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();
Run Code Online (Sandbox Code Playgroud)
但有时会产生错误:序列不包含元素
本论坛上有人建议使用FirstOrDefault()noFirst()
如果第一行中的第一列包含值 10 或者没有第一列包含值 10 的行,变量索引的值为 0,那这行得通
我的解决方案是:
try {
index = (dgv.Rows.Cast<DataGridViewRow> ()
.Where(r => r.Cells[0].Value.Equals(10))
.Select(r => r.Index)).First();
} catch {
index = -1
}
Run Code Online (Sandbox Code Playgroud)
此致,
我需要检查 DataGridView 中的第一列是否包含值 10
该作业的正确工具(方法)将是.Any,true如果集合中的任何项目满足给定条件,则返回,如果不满足或集合为空,则返回false。
if (dgv.Rows.Cast<DataGridViewRow>().Any(r => r.Cells[0].Value.Equals(10)))
{
// exists
}
else
{
// not exist
}
Run Code Online (Sandbox Code Playgroud)
如果你真的需要一个索引值,.DefaultIfEmpty当集合为空或找不到所需值时,使用方法返回默认值。
var index = dgv.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells[0].Value.Equals(10))
.Select(r => r.Index)
.DefaultIfEmpty(-1)
.First();
Run Code Online (Sandbox Code Playgroud)
有了.DefaultIfEmpty可以“告诉”你的代码的读者您的实际意图,无需额外条件或空传播者。
并且因为您在返回空集合的情况下提供了默认值,所以您可以安全地使用.First()方法,因为将始终返回至少一项。
要查找所有出现的给定值,请不要使用First或FirstOrDefault。