我正在使用Northwind客户表,在那里我填充数据集并获得数据表。
我正在尝试使用动态linq,并希望动态选择columnName
var qry = MyDataTable.AsEnumerable().AsQueryable().Select("new(Country)");
现在我已经对国家进行了硬编码但是我还是得到了这个错误
No property or field 'Country' exists in type 'datarow'
我希望最终将这个查询更改为动态获取列名。
请帮助! !谢谢。
重要提示在这里(粗体):
没有属性或字段'Country'存在in type 'datarow'
DataTable
类的扩展方法AsEnumerable
返回一个IEnumerable<T>
,其中T的类型为DataRow
。现在动态LINQ的Select
方法想要处理这个类型 DataRow
,它没有属性 Country
。
你可以试试这个:
var qry = MyDataTable.AsEnumerable().AsQueryable()
.Select("new(it["Country"] as CountryAlias)");
it
现在表示DataRow
类型的变量,您可以使用该类型的方法,也可以在上面的示例中使用索引器。(动态LINQ支持通过整数索引访问数组元素,但我不确定是否使用字符串键访问索引器将工作)
我使用了Slauma的答案,它起作用了。另外,我正在用动态linq做order,也许这将对某人有所帮助。我把代码放到这里。
string dynamicLinqText = $"it["{sortColumnName}"] {sortDirection}"; //it["PERSON_NAME"] asc
result = result.AsEnumerable().OrderBy(dynamicLinqText).CopyToDataTable();