PDA

View Full Version : سوال: نمایش اطلاعات Dynamic Pivot از storedprocedure داینامیک بوسیله Entity Framework



Iran58
شنبه 30 مرداد 1395, 09:19 صبح
سلام
من sp زیر را نوشته ام

ALTER proc [dbo].[aaaa]
as
begin
DECLARE @Qry VARCHAR(max) = 'select Date'
select @Qry += ', max(case when name = ''' + Name + ''' then Price end) as [' + NAME + ']'
FROM test3
GROUP BY Name
SET @Qry += CHAR(13) + 'from test3' + CHAR(13) + 'group by Date'
EXEC(@Qry)
end

و خروجی آن بصورت زیر است
142060
و دیتاگرید را بصورت زیر پر کرده ام

private void Form1_Load(object sender, EventArgs e)
{
DataClasses1DataContext dc = new DataClasses1DataContext();
var staff = dc.aaaa();
radGridView1.DataSource = staff;
}

اما فقط ستون Date را فقط در دیتاگرید نمایش می دهد
142061
چگونه باید کدم را بنویسم تا تمام ستونها را نمایش بدهد
درضمن با linq می خواهم باشد
باتشکر

Iran58
دوشنبه 26 مهر 1395, 09:40 صبح
سلام
دوستان کسی می تواند با کد ef داده های pivot (کد sql پست 1) را در دیتاگرید نمایش بدهد

Iran58
پنج شنبه 29 مهر 1395, 10:52 صبح
سلام
یک sp داریم که بکمک pivot ایجاد شده است

ALTER proc [dbo].[aaaa]
as
begin
DECLARE @Qry VARCHAR(max) = 'select Date'
select @Qry += ', max(case when name = ''' + Name + ''' then Price end) as [' + NAME + ']'
FROM test3
GROUP BY Name
SET @Qry += CHAR(13) + 'from test3' + CHAR(13) + 'group by Date'
EXEC(@Qry)
end



و هر بار که این sp اجرا میشود تعداد ستونهای آن می تواند متفاوت باشد
و من این با دستور زیر و بکمک ado.net اطلاعات را می خوانم

public DataTable ListShowAll()
{
SqlDataAdapter da;
DataTable table = new DataTable();
using (var con = new SqlConnection(Public.ConnectionString))
using (var cmd = new SqlCommand("aaaa", con))
using (da = new SqlDataAdapter(cmd))
{
cmd.Parameters.Clear();
cmd.CommandType = CommandType.StoredProcedure;
da.Fill(table);
}
return table;
}

حال سوال من این است این عمل را چگونه می توانم بکمک ef انجام بدهم
باتشکر

Mani_rf
پنج شنبه 29 مهر 1395, 13:35 عصر
اگر از EF6 یا بالاتر استفاده میکنی معادل چیزی که شما با ADO.Net نوشتی توی EF میشه :

Using(var db= new ModelName.Model_Datacontext())
{
var x= db.aaa();
}


قبل از استفاده از این کد باید مثل عکس تیک sp مورد نظر رو هم در زمان ساختن مدل بزنی تا اون رو هم ایجاد کنه.

143089

143090

Iran58
پنج شنبه 29 مهر 1395, 13:50 عصر
اگر از EF6 یا بالاتر استفاده میکنی معادل چیزی که شما با ADO.Net نوشتی توی EF میشه :

Using(var db= new ModelName.Model_Datacontext())
{
var x= db.aaa();
}


قبل از استفاده از این کد باید مثل عکس تیک sp مورد نظر رو هم در زمان ساختن مدل بزنی تا اون رو هم ایجاد کنه.

143089

143090
سلام
مشکل من داینامک بودن ستونها می باشد در sp مورد نظر وبا کد بالا نمایش داده نمیشود

Mani_rf
پنج شنبه 29 مهر 1395, 14:05 عصر
من تو sp که نوشتی و همینطور توی کد ADO ، ندیدم جایی پارامتر فرستاده باشی. برای SP پارامتر تعریف کن، زمانی که از روی اون مدل رو میسازی میتونی برای SP پارامتر بفرستی


Using(var db= new ModelName.Model_Datacontext())
{
string CName = "Col1";
var x= db.aaa(CName);
}

Iran58
پنج شنبه 29 مهر 1395, 14:28 عصر
من تو sp که نوشتی و همینطور توی کد ADO ، ندیدم جایی پارامتر فرستاده باشی. برای SP پارامتر تعریف کن، زمانی که از روی اون مدل رو میسازی میتونی برای SP پارامتر بفرستی


Using(var db= new ModelName.Model_Datacontext())
{
string CName = "Col1";
var x= db.aaa(CName);
}

سلام
sp من در اصل بصورت زیر است

ALTER proc [dbo].[S_ListShow_All]
@Year NVARCHAR(10),
@Month NVARCHAR(10)
as


begin
DECLARE @id AS NVARCHAR(Max)
DECLARE @names AS NVARCHAR(Max)
DECLARE @Pivot AS NVARCHAR(MAX)
;WITH cte AS
(
SELECT DISTINCT [WatchTypeID] id, [Name]
FROM [V_WatchType_Father_Child]
where [WatchTypeID] in (select
WatchTypeID
from [dbo].[Watch_Subsidiary]
where LEFT(dbo.PrDate([Date]),7)=@Year+'/'+@Month)
)
SELECT @names = ISNULL(@names + ', ' ,'') + '[' + CAST(id AS NVARCHAR(10)) + '] As [' + name + ']',
@id = ISNULL(@id + ', ' ,'') + '[' + CAST(id AS NVARCHAR(10)) + ']'
FROM cte
-- SELECT @names, @id

SET @Pivot =
'
select [pDate],[NameDate],[BusinessCalendar_DayTypeID],' + @names + '
from
(
select [pDate], [WatchTypeID], [fn],[BusinessCalendar_DayTypeID],[NameDate]
from V_Watch_List

Where LEFT([pDate],7)= '''+@Year+'''+''/''+'''+@Month+'''
) src
pivot
(
Max([fn])
for [WatchTypeID] in (' + @id + ' )
) piv;
'
EXEC(@Pivot)
end

Mani_rf
پنج شنبه 29 مهر 1395, 16:57 عصر
زمانی که از روی که پروسجر مدل میسازید، اگر پارامتر ورودی داشته باشه خودش تشخیص میده و متد معادلی که براتون میسازه رو با همون پارامتر های ورودی ایجاد میکنه. زمانی هم که به روشی که گفتم متد رو صدا میزنید طبیعتا باید پارامتر ها رو بفرستید تا پروسجر به صورت کامل کار کنه. شما اقدام به ایجاد مدل از روشی که توی پاسخ اول گفتم بکنید مطمعنا به مشکل بر نخواهید خورد

Mahmoud.Afrad
پنج شنبه 29 مهر 1395, 18:12 عصر
اگر تعداد ستونها از قبل مشخص و ثابت هست میشه کاری کرد ولی اگر تعداد مشخصی ندارند بایست به DataTable (یا ساختاری سبیه) تبدیل کنید.

Iran58
شنبه 01 آبان 1395, 10:58 صبح
اساتید با همین sp می توانید دستور مورد نظر را بنویسید
باتشکر

Iran58
شنبه 01 آبان 1395, 11:13 صبح
اگر از EF6 یا بالاتر استفاده میکنی معادل چیزی که شما با ADO.Net نوشتی توی EF میشه :

Using(var db= new ModelName.Model_Datacontext())
{
var x= db.aaa();
}


قبل از استفاده از این کد باید مثل عکس تیک sp مورد نظر رو هم در زمان ساختن مدل بزنی تا اون رو هم ایجاد کنه.

143089

143090
سلام
من همه این کارها را کرده ام اما مشکل اینجاست که ستونها در sp مورد نظر داینامیک هستند و فقط یک ستون را نمایش می دهد