2016-11-08 25 views
0

我有一個linq表達式,我需要將其更改爲Stored過程。 這個linq表達式從dbml(表)返回一個已定義的對象。從Linq中的存儲過程返回對象

事情是,當我打電話給我的存儲過程(讓我們說SP_test)它返回一個SP_testResult數組,我希望它返回一個定義的表作爲一個對象。

如果我在dbml中更改SP的返回類型,當我檢查結果時,它不返回任何內容,但是如果我自己運行SP,它將返回一個集合。

有沒有辦法來定義返回的類型?說SP_test返回一個Client對象? (這是我的dbml模型中的表)還是應該將SP_testResult映射到Client對象?

我想從這個去:

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(); 

在這兩種情況下,this.bookings從預訂類的數組。

+0

請出示你的代碼。 – sr28

+0

編碼在哪裏? ! – mybirthname

+0

對不起,我添加了代碼 –

回答

0

也許考慮做這樣的東西,你的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. 
     } 
    } 
}