如何从linq调用存储过程到实体并将结果输入到对象中

时间:2012-03-05 07:47:15

标签: entity-framework-4 linq-to-entities

我有一个存储过程,它返回字符串值。 现在我必须将此存储过程从linq调用到实体查询,并将其结果存储到 我的复杂类型的字符串属性。 但我得到以下错误。 “无法将类型objectresult隐式转换为字符串”。 我的查询如下:

using (NeoSoftWindowApp_dbEntities objDatabase = new NeoSoftWindowApp_dbEntities())
{
     ObjectParameter address = new ObjectParameter("Address", typeof(string));
     return (from tbl in objDatabase.COMPs
     select new CompanyReport_ComplexType
     {

    Address=objDatabase.ReturnAddressDetailForCompany(tbl.COMP_ADD1,tbl.COMP_ADD2,
                     tbl.COMP_ADD3, address),
        City = tbl.COMP_CITY,
        CompanyCode = tbl.COMP_NO,
        CompanyName = tbl.COMP_NAME

       }).ToList();
}

在上面的代码中,ReturnAddressDetailForCompany()是我的存储过程,它返回combine 全部3个地址值。 但我在c

中得到错误

1 个答案:

答案 0 :(得分:0)

您无法在Linq-to-entity查询中调用存储过程,因为存储过程不可组合(不能在SQL select语句中使用)。你必须使用它:

 ObjectParameter address = new ObjectParameter("Address", typeof(string));
 return (from tbl in objDatabase.COMPs.ToList() // Here you change it to Linq-to-Objects
 select new CompanyReport_ComplexType
 {

Address=objDatabase.ReturnAddressDetailForCompany(tbl.COMP_ADD1,tbl.COMP_ADD2,
                 tbl.COMP_ADD3, address).FirstOrDefault(), // Here you must iterate result set from your SP
    City = tbl.COMP_CITY,
    CompanyCode = tbl.COMP_NO,
    CompanyName = tbl.COMP_NAME

 }).ToList();

但它会为结果集中的每条记录调用存储过程(=它会为每条记录进行额外的数据库往返)。

相关问题