.NET MVC开发仓储方法时报“Argument 1 cannot convert from string to System.Type”如何解决
报错根因
- 你调用的
Database.SqlQuery方法没有显式指定返回实体的泛型参数,触发了非泛型重载的匹配逻辑:非泛型SqlQuery的第一个入参要求是System.Type类型,用于声明返回结果的映射类型,你直接传入了存储过程名字符串,触发类型转换报错。 - 附加问题:
SqlQuery方法默认返回的是DbRawSqlQuery类型,不能直接赋值给IQueryable类型变量,需要显式转换。
修复方案
修改后代码如下:
public IQueryable<sp_GetAllRecordStages_Result> ExecuteSpStageView(DbContext dbcontext, string orderno) { // 显式指定泛型参数匹配返回实体类型,参数用SqlParameter标准化声明 var result = dbcontext.Database.SqlQuery<sp_GetAllRecordStages_Result>( "sp_GetAllRecordStages @orderno", new SqlParameter("@orderno", orderno) ); // 转换为IQueryable类型返回 return result.AsQueryable(); }
补充说明:如果业务不需要IQueryable的延迟查询特性,可以直接将方法返回值改为IEnumerable<sp_GetAllRecordStages_Result>,省略AsQueryable()调用即可。
内容的提问来源于stack exchange,提问作者Hitendra
相关产品推荐
相关产品推荐

