2010-06-12 122 views
4

。我得到这个错误:“不能转换lambda表达式来键入'字符串',因为它不是一个委托类型” - 关键字选择成为蓝色下划线你能否请指教。如何解决此错误“无法将lambda表达式转换为键入'string',因为它不是委托类型”

Employee emp = new Employee(); 
    comHandledBySQt.DataSource = from x in emp.GetDataFromTable("1") 
        select new { x.Id, Name = x.FirstName + " " + x.LastName }; 
    comHandledBySQt.DisplayMember = "Name"; 
    comHandledBySQt.ValueMember = "Id"; 

上面的代码应该显示下降的员工姓氏和名字列表在组合框中

+0

这是Vb.Net还是C#。不能兼而有之。 – epitka 2010-06-16 20:51:09

+0

您可以在分配给数据源之前创建“var”并查看错误是否相同? – epitka 2010-06-16 20:53:20

回答

2

如果您有一个强类型数据集,那么您可以绝对地以一种接近您尝试的方式对表的命名成员执行查询。

var queryA = (from x in dataSet.EmployeeTable 
         select new { x.Id, Name = x.FirstName + " " + x.LastName }).ToList(); 

从你给定的错误,它不会出现,你有一个强类型数据集,它很可能是因为您的返回值不是一个DataSet而只是一个DataTable(至少,从我尝试重新创建您的错误消息,我在DataTable上获取它,而不是设置)。但是如果没有强类型的DataSet/DataTable,这是您要执行的查询。

var queryB = (from DataRow x in someSet.Tables[0].Rows 
      select new { Id = (string)x["Id"], Name = (string)x["FirstName"] + " " + (string)x["LastName"] }).ToList(); 

注意,在这两种情况下,你将包括.ToList()调用,因为没有它你另一错误说,复杂的数据绑定需要一个IList或IListSource,该查询(不ToList( )呼叫)既不是。

+0

不要忘记检查DBNull! – 2010-06-12 22:47:51

2

x.Id可能需要进行的分配,如:
select new { Id = x.Id, Name = string.Format("{0} {1}", x.FirstName, x.LastName) };

DataSet是不可枚举的,所以如果GetDataFromTable("1")返回DataSet,你需要枚举相应的结果集/表,例如。 GetDataFromTable("1").Tables[0]如果你只有一个结果集。

枚举中的每个元素将为DataRow,它具有索引(而不是属性)存取器:DataRow[columnIndex]DataRow[columnName]

+1

没有工作。只是为了让你知道GetDataFromTable返回DataSet。我会看看我能做些什么。不管怎么说,还是要谢谢你。 – peace 2010-06-12 22:00:39

相关问题