从Linq中的存储过程返回对象

本文关键字:返回 对象 存储过程 Linq | 更新日期: 2023-09-27 18:16:53

我有一个linq表达式,我需要将其更改为存储过程。这个linq表达式从dbml(一个表)返回一个已定义的对象。

事情是,当我调用我的存储过程(让我们说SP_test)它返回一个SP_testResult数组,我希望它返回一个已定义的表作为对象。

如果我在dbml中改变SP的返回类型,当我检查结果时,它不返回任何东西,但如果我自己运行SP,它返回一个集合。

是否有定义返回值类型的方法?说SP_test返回一个客户端对象?(这是一个表在我的dbml模型)或者我应该映射SP_testResult到一个客户端对象?

我想从这个开始:

this.bookings = db.Bookings
        .FilterUser(_main.Identity.GetUser())
        .Where(x => x.ProductId == PackageContent.ProductId && x.CampaignId == PackageContent.CampaignId && x.ClientId == PackageContent.ClientId)
        .Where(x => Math.Abs((x.DateCreated - PackageContent.DateCreated).Days) < daysRange)
        .ToList()
        .Union(db.Bookings.Where(x => PackageContent.ExternCode == x.BussinessRefernce))
        .OrderBy(x => x.DateCreated);

:

this.bookings = db.SP_SearchSimilarBookings.toList();

在这两种情况下,

从Linq中的存储过程返回对象

也许可以考虑这样做,将您的SP结果映射到您的自定义对象:

//create your connection string
string Conn = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(Conn))
{
    //add your SP to the SqlCommand
    SqlCommand cmd = new SqlCommand("dbo.MyProcedure", connection);
    cmd.CommandType = CommandType.StoredProcedure;
    SqlParameter myParam = new SqlParameter("@YourParam", //Your SqlDbType);
    myParam.Value = //your value;
    cmd.Parameters.Add(myParam);
    //Add more parameters if applicable...
    SqlDataReader dr = command.ExecuteReader();
    if (dr.HasRows)
    {
        while (dr.Read())
        {
            //map to your custom object here by instantiating one and mapping 
            //the SqlDataReader columns to your custom object properties.
        }
    }
 }