C# 在datagridview C中显示两个主键之间的datatable#

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(

(对不起,我的英语这么差) 我尝试像这样在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(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对象的情况下,这将是一个优化——在这种情况下,将对集合中的每个项进行解析。