我有一个linq表达式,我需要更改为存储过程。 此linq表达式从dbml(表)返回一个已定义的对象。
问题在于,当我调用我的存储过程(假设说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都是来自Bookings类的数组。
答案 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.
}
}
}