【问题标题】:Getting 'Data source is an invalid type' when binding Linq query to Gridview将 Linq 查询绑定到 Gridview 时获取“数据源是无效类型”
【发布时间】:2010-10-10 22:25:56
【问题描述】:

我正在尝试将 gridview 绑定到使用存储过程的 linq to sql 查询。当我运行页面时,我收到以下错误:

数据源是无效类型。它必须是 IListSource、IEnumerable 或 IDataSource。

var db = new TableItemDataContext();
var q = db.sp_SearchForItems("1","2","3","4"); 
GridView1.DataSource = q;
GridView1.DataBind();

有什么想法吗?

【问题讨论】:

    标签: asp.net linq linq-to-sql


    【解决方案1】:

    使用 ToList() 扩展方法将查询转换为项目列表。

    GridView1.DataSource = q.ToList();
    

    这也将产生在转换时运行查询的效果,因此您可能想看看仅转换为 IEnumerable 是否可行。

    编辑:根据评论线索进行澄清。问题出在 SPROC 的构造和 LINQ 无法检测到返回值。根据Stored Procedure & LINQ, Dmbl File unable to interpret the result set 更改 SPROC 允许 LINQ 检测架构,之后可以将 SPROC 改回。

    【讨论】:

    • 感谢您的快速回复!我使用了 ToList(),但没有得到智能感知(但确实使用 System.Linq),编译时收到“'int' 不包含 'ToList' 的定义,并且没有扩展方法 'ToList' 接受第一个 arg可以找到 int 类型的。”想法?
    • Linq 一定不能确定存储过程返回的表的架构,并认为它返回一个 int。我知道包含临时表的存储过程存在一些问题。链接到下一条评论中的问题...
    • stackoverflow.com/questions/521736/… -- 如果你可以让它工作,它也许可以在没有 ToList() 的情况下直接进行查询。
    • 嘿!那解决了它。我的存储过程使用动态 where 子句,结果是 exec (@sql)。我将其更改为使用没有动态 where 子句的普通 sql,并将 sproc 重新导入 dbml。一旦完成,我就可以使用 ToList 并将 sproc 改回来。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2017-10-16
    • 2013-09-22
    • 1970-01-01
    相关资源
    最近更新 更多