C#,实体框架存储过程

3

我正在使用Entity Framework。 我有以下内容:

var db = new LikEntities();

GetParamAlerts_Result paramRslt = db.GetParamAlerts();

GetParamAlerts 是一种存储过程,属于特定类型。

System.Data.Objects.ObjectResult<GetParamAlerts_Result>

请注意,GetParamAlerts返回多行。
当我运行上面的代码时,我收到以下错误消息:
“无法隐式转换类型:System.Data.Objects.ObjectResult到PVT_Alert_Notification.GetParamAlerts_Result”。
不确定如何解决。

Linq to SQL 不同于 LINQ to Entities。这是 Entity Framework 还是 LINQ to SQL? - StriplingWarrior
这是实体框架。 - Nate Pet
@NatePet,你从这个方法返回一个 IList<GetParamAlerts_Result> 吗? - Christian Phillips
@NatePet,如果您能告诉我们期望的结果,那将非常有帮助,比如您只需要一个对象还是一个集合等。上面的代码表明您只需要一个对象,但您的评论又表明您需要一个列表,这让人感到困惑。 - Christian Phillips
3个回答

5
这是因为Entity Framework无法保证存储过程始终只返回单行结果,所以它被放入一个ObjectResult中,它只是一个可枚举的集合。如果你总是期望单个结果,可以使用db.GetParamAlerts().Single()将结果作为GetParamAlerts_Result获取,或者使用任何标准的可枚举方法,比如First(),FirstOrDefault(),SingleOrDefault()等。

@NatePet 我不太明白你的问题。使用 ToList() 并不能将一个集合转换为单一的类型,因此可能会导致类似的类型转换错误。 - Steven V
@NatePet System.Data.Objects.ObjectResult<GetParamAlerts_Result> 已经是一个列表了,不需要使用 ToList() 或任何其他方法。 只需使用 GetParamAlerts_Result paramRslt = db.GetParamAlerts().Single(); 就可以运行了。 - Steven V
Steven,在我的情况下,我期望有多个结果。如果我使用Single(),它只会返回一个结果。如何调整代码以允许多个结果? - Nate Pet
@NatePet 然后将其改为 ObjectResult<GetParamAlerts_Result> paramRslt = db.GetParamAlerts();,然后 paramsRslt 将拥有结果集合,您可以对其进行迭代或发送到视图。 - Steven V
由于 Where() 返回的是 IEnumerable<T> 而不是 ObjectResult<T>。如果您想要同时涵盖这两种情况,因为 ObjectResult 也实现了 IEnumerable ,请将 paramRslt 的类型更改为 IEnumerable<GetParamAlerts_Result>。结果如下: IEnumerable<GetParamAlerts_Result> paramRslt = db.GetParamAlerts().Where(a => a.Companyid == companyId); - Steven V
显示剩余2条评论

1
看起来你应该要么使用
PVT_Alert_Notification.GetParamAlerts_Result paramRslt = db.GetParamAlerts();

或者这个方法返回了错误的类型?你可以贴出该方法的代码吗?或者你得到了一个集合
如果您有一个集合,您可以使用:
var result = db.GetParamAlerts();
return result.FirstOrDefault();

你会在这里看到一个类似的帖子here

0
尝试在结尾处加入“FirstOrDefault”。
 GetParamAlerts_Result paramRslt = db.GetParamAlerts().FirstOrDefault();

尝试使用强制类型转换

  GetParamAlerts_Result paramRslt = db.GetParamAlerts().Cast<GetParamAlerts_Result>().ToList(); 

谢谢,但我得到了一个列表。您能否善意地调整代码以反映这一点。我尝试使用.ToList(),但没有起作用。 - Nate Pet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接