2011-04-13 101 views
0

我使用Northwind Customers Table来填充数据集并获取数据表。动态Linq - 在'datarow'类型中不存在属性或字段

我试图使用动态LINQ和想选择COLUMNNAME动态

var qry = MyDataTable.AsEnumerable().AsQueryable().Select("new(Country)"); 

现在我有硬编码的国家,但即使如此,我得到这个错误

No property or field 'Country' exists in type 'datarow' 

我希望最终更改此查询以动态获取列名称。

请帮忙!!!谢谢。

+3

您可以通过单击答案旁边的复选标记来指出Slauma提供了正确的答案。 – 2011-04-13 18:03:25

回答

4

重要的提示是在这里(粗体):

无属性或字段 '国家' 存在 在 '数据行' 的DataTable

扩展方法AsEnumerable返回一个IEnumerable<T>,其中T的类型为DataRow。现在动态LINQ的Select方法想要使用这个类型DataRow其中还没有属性Country当然。

你可以代替试试这个:

var qry = MyDataTable.AsEnumerable().AsQueryable() 
    .Select("new(it[\"Country\"] as CountryAlias)"); 

it现在代表DataRow类型的变量,你可以使用这种类型的方法,或许也是在我上面的例子中,索引器。 (动态LINQ支持通过整数索引访问数组元素,但我不确定使用字符串键访问索引器是否可行。)

+0

非常感谢你我只是用作 – Graci 2011-04-13 16:42:43

+0

var qry = MyDataTable.AsEnumerable()。AsQueryable() .Select(“new(it [\”Country \“])as CountryAlias”); – Graci 2011-04-13 16:43:49

+0

是的,我也刚刚看到'as'是必要的。我会编辑我的答案以纠正错误。 – Slauma 2011-04-13 16:46:08