数组的IQueryable类型

时间:2014-01-29 04:35:43

标签: linq iqueryable dynamic-linq

我有一个像这样的动态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)");

1 个答案:

答案 0 :(得分:1)

当您使用Dynamic LINQ时,所有扩展都会返回带有dynamic元素的集合,因此您需要更改代码,例如

foreach (dynamic str in query) 
{
    ....
}

同样适用于您的情况str是具有字段Country

的对象

<强>更新
来自评论的问题 如果您致电DataTableAsEnumerable时数据为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 CountryString时,String Contains方法