无法将对象转换为类型为ienumerable的类型查询

时间:2014-05-14 08:01:52

标签: c# asp.net

在我的网格中,一个DataField是从代码而不是从db加载的。我认为我可以做这样的事情来实现这一目标。

是否有可能真的像这样做

网格类

protected void rgGrid_DataBound(object sender, EventArgs e)
{
    for(int item = 0; item<=this.rgGrid.Items.Count-1; item++)
    {
        GridDataItem dataItem = this.rgGrid.Items[item];

        double  NumberOfDays = ((IEnumerable<MonthReportRowItem>)this.rgGrid.DataSource).ElementAt(item).NumberOfDays;
    }
}

MonthRep(数据字段为“已生成”)

public double  NumberOfDays
{
    get
    {
        return (this.VacationDays - this.BookedVacationDays) + this.UsedVacationDays;
    }
}

因为我收到错误消息

  

无法将类型为System.Data.Objects.ObjectQuery的对象强制转换为类型   “System.Collections.Generic.IEnumerable

我应该尝试不同的方法还是我只是一个小错误?

感谢您的帮助和快速回答

2 个答案:

答案 0 :(得分:0)

试试这个:

double  NumberOfDays =
        this.rgGrid.DataSource
                .Cast<MonthReportRowItem>()
                .ElementAt(item)
                .NumberOfDays;

也许您的DataSource类型ObjectQuery不属于ObjectQuery<T>类型,因此您可以使用IEnumerable<MonthReportRowItem>将其投放到Cast<T>(),获取所需的元素位置,然后获得财产。

答案 1 :(得分:0)

如果我没记错,DataSource属性是一个对象,所以在调用ObjectQuery之前需要将其强制转换为AsEnumerable。所以这应该做的工作:

((ObjectQuery)this.rgGrid.DataSource).AsEnumerable()
            .Cast<MonthReportRowItem>()
            .ElementAt(item)
            .NumberOfDays

AsEunumerable命名空间中的System.Linq