我有一个像这样的动态Linq查询。我需要将结果集转换为数组。但我无法将IQueryable类型转换为数组。有什么建议吗?
我的代码: -
var query = Data.AsEnumerable()
.AsQueryable()
.Select("new(it[\"Country\"] as Country)", "it")
.Take(10);
foreach (string str in query) // **getting error Unable to cast object of type 'DynamicClass1' to type 'System.String**
{
}
我使用这样修复它: - foreach(查询中的var str)。
但我现在有另一个问题。我已经在查询中添加了where条件。现在我收到错误“'DataRow'类型中没有属性或字段'Country'”。 以下是我的查询
var query= Data.AsEnumerable().AsQueryable().Where("Country = @0", "London").Select("new (Country as Country)");
答案 0 :(得分:1)
当您使用Dynamic LINQ
时,所有扩展都会返回带有dynamic
元素的集合,因此您需要更改代码,例如
foreach (dynamic str in query)
{
....
}
同样适用于您的情况str
是具有字段Country
<强>更新强>
来自评论的问题
如果您致电DataTable
或AsEnumerable
时数据为AsQueryable
,则您需要使用DataRow
集合进行处理,因此当您希望按列值对其进行过滤时,需要使用{{1像这样
DataRow
或者你可以像那样选择
Data.AsQueryable().Where("it[\"Country\"] = @0", "London")
<强> UPDATE2 强>
在您没有为字段指定类型之前,它可以是var query= Data.AsQueryable()
.Select("new (it[\"Country\"] as Country)")
.Where("Country = @0", "London")
,因此您需要像这样更改Object
子句
Select
在这种情况下,当....
.Select("new(Convert.ToString(it[\"Country\"]) as Country)")
....
字段Where
之后Select
Country
为String
时,String
Contains
方法