我正在为每个实体创建包含所有数据库访问函数的类(GetById
,Insert
,Update
,Delete
,{{ 1}})。
对于我的GetList
函数,我总是使用存储过程,因为它们可能变得非常复杂(我更喜欢基于Linq的TSQL)。我无法返回正确的类型。我希望一个对象列表能够在我的代码中使用以填充网格等。
有人可以查看我的代码并告诉我哪里出错了吗?
GetList
我收到错误:
无法将类型'System.Data.Entity.Core.Objects.ObjectResult'隐式转换为'DAL.Customers_GetList_Result'
答案 0 :(得分:2)
嗯,我想我想出了我想要的东西:
public IEnumerable<Customers_GetList_Result> GetList(string CustomerName) {
using (var db = new DataEntities()) {
return db.Customers_GetList(CustomerName);
}
}
我忘了将IEnumerable
添加到我的函数声明中。抱歉,从VB.net到C#。
答案 1 :(得分:0)
生成的存储过程返回ObjectResult<T>
。
ObjectResult<T>
是一个集合。如果要返回T类型的单个元素,则需要执行以下操作。
public Customers_GetList_Result GetList(string CustomerName) {
using (var db = new DataEntities()) {
return db.Customers_GetList(CustomerName).Single();
}
}
答案 2 :(得分:0)
当调用映射到存储过程的函数时,我得到了同样的错误,我希望返回一个复杂的数据类型。我在选择单个记录时才得到它,上面的建议有所帮助。原始代码是:
using (ede = new EDEntities())
{
var item = ede.SelectMatrixItem(itemCode);
return item;
}
当我将其更改为:
using (ede = new EDEntities())
{
var item = ede.SelectMatrixItem(itemCode).FirstOrDefault();
return item;
}
然后错误就消失了。我的问题是FirstOrDefault或SingleOrDefault是否是更好的选择。 ItemCode是主键。
乔伊