C# 在datagridview C中显示两个主键之间的datatable#
(对不起,我的英语这么差) 我尝试像这样在datagridview中显示数据C# 在datagridview C中显示两个主键之间的datatable#,c#,linq,datagridview,C#,Linq,Datagridview,(对不起,我的英语这么差) 我尝试像这样在datagridview中显示数据 var db = new mydataDataContext(); var id1 = from data in db.tbl_adads where data.num1 ==int.Parse( txtnum1.Text) select data.id; int id_1 =int.Parse(
var db = new mydataDataContext();
var id1 = from data in db.tbl_adads
where data.num1 ==int.Parse( txtnum1.Text)
select data.id;
int id_1 =int.Parse(id1.ToString());
var q = from show in db.tbl_adads
where show.id > id_1
select show;
dataGridView1.DataSource =q ;
但当我运行并使用它时,编译器从
int id_1 =int.Parse(id1.ToString());
说
中发生类型为“System.FormatException”的未处理异常
System.Data.Linq.dll
其他信息:输入字符串的格式不正确
我该如何做我的工作?
id1
的类型为IEnumerable
(其中T是data.id的类型)。当您在此变量上调用ToString()
时,您只得到变量的类型名,它不能解析为int
您可能只需要第一个匹配结果:
var id1 = db.tbl_adads.Where(d => d.num1 == Int32.Parse(txtnum1.Text))
.Select(d => d.id)
.FirstOrDefault();
避免在linq查询中使用Parse语句,最好在linq查询中使用它之前使用它
var db = new mydataDataContext();
int num1_ = int.Parse( txtnum1.Text)
var id1 = from data in db.tbl_adads
where data.num1 ==num1
select data.id;
int id_1 =int.Parse(id1.ToString());
var q = from show in db.tbl_adads
where show.id > id_1
select show;
dataGridView1.DataSource =q ;
那么如何找到id号呢?.FirstOrDefault();获取集合的第一个值,该值为int。这正是人们不应该对所有内容都使用var的原因。您剥夺了一个可以防止类似错误的检查。@David嗯,通常我对查询使用var
,以保持代码的一致性(因为查询通常返回匿名类型,我只是不能对查询类型使用类型名)@user3142031请记住,引用类型(如字符串)的默认值将是null
。因此,如果表中没有匹配的行,则返回null。尝试调用id1.ToString()
时,Null将引发NullReferenceException。因此,您应该检查如果(id1!=null)
在这种情况下,我认为在解析为完整解析时遇到的异常在这种情况下并不重要。值将只解析一次,解析后的值将传递给表达式。在Linq to对象的情况下,这将是一个优化——在这种情况下,将对集合中的每个项进行解析。