动态 Linq - 类型 'datarow' 中不存在任何属性或字段



我正在使用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();

最新更新