如何解决此错误“无法将 lambda 表达式转换为类型 'string',因为它不是委托类型”?

3
我遇到了这个错误:“无法将lambda表达式转换为类型'string',因为它不是委托类型” - 关键字select会被下划线标记为蓝色。请问您有什么建议?
   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";

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

这是VB.Net还是C#?不能两者兼备。 - epitka
你能否在为数据源分配数据之前创建一个“var”,看看是否会出现相同的错误? - epitka
2个回答

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()调用)既不是IList也不是IListSource。

不要忘记检查 DBNull! - Muad'Dib

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接