نقل قول نوشته شده توسط davidrobert مشاهده تاپیک
ولی با EF شما راحت همچین دستوری که هم تبدیل تاریخ میلادی به شمسی و هم سه رقم اعشار و کلی عملیات دیگه که با هم انجام بده و خروجی 83 تا فیلد و 189.448 رکورد تو 30 ثانیه داخل شبکه همه رو لود کنه و توسط اینترنت و از راه دور تو یک دقیقه با این همچین کوئری لود کنه به نظر شما شما میتوانید با ای اف این کوئری بدون ایراد و با سرعت بنویسید.

SELECT DISTINCT TOP (100) PERCENT Tbl_Gobouz_Vosual_Deramed.GVD_Shomare_Parvande, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_SHS_ ShomareSanad,
(SELECT dbo.MakeCompleteShmsiDate(Tbl_Gobouz_Vosual_Derame d.GVD_Date_Sabt_Sanad, '/') AS Expr1),
CASE WHEN Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Mele yat = 0 THEN N'غیر ایرانی' ELSE 'ایرانی' END, Tbl_Category_Motvafa.CM_Category_Motvafa,
Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_CM_C ode_Mali, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Shom are_Shenasname, Tbl_category_sex.CTS_Sex,
Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Name AndLast, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Fath er, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Maha l_Sodor,
Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Tel, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Mobi le, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Name _Tahvall_Grande,
Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Nesb at_By_Motvafa, Tbl_Gobouz_Vosual_Deramed.GVD_Moshekhesat_Perdakht _Konenede, Tbl_Gobouz_Vosual_Deramed.GVD_Shomare_Perdakhtkone nde,
(SELECT dbo.MakeCompleteShmsiDate(Tbl_Sabt_Motovafy_Gabz_P esh_And_Sanad_Gabr.SM_Born, '/') AS Expr1),
(SELECT dbo.MakeCompleteShmsiDate(Tbl_Sabt_Motovafy_Gabz_P esh_And_Sanad_Gabr.SM_Death, '/') AS Expr1), Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_AgeY ear, Tbl_Bolog.B_Bolog,
Tbl_Result_Tomp.RT_Title, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_From , Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Maha l_Dafn, Tbl_Gabr.SM_Faz, Tbl_NameGete.NG_NameGete,
Tbl_Gabr.SM_Gete, Tbl_Gabr.SM_Radif, Tbl_Gabr.SM_Shomare, Tbl_Gabr.SM_Tabage, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Reze rv,
Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Shom are_Gevaye_Fot, Tbl_EletePhot.EPH_EletePhoto, Tbl_Ostan.O_Title, Tbl_City.C_Title,
Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Addr ess_Mahal_Sokonet, CASE WHEN Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Bome _Ger_Bome = 1 THEN N'بومی' ELSE N'غیر بومی' END,
Tbl_Category_Mahal_Vogo_Fot.CMVF_Title, Tbl_Ostan_1.O_Title, Tbl_City_1.C_Title, Tbl_Category_Vazeyat_Gabr.CVG_Title, Tbl_Category_Pay.CP_Title, Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Desc ription,
format(Tbl_Gobouz_Vosual_Deramed.GVD_Gevahe_Motese de, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Sang, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Gevaye_Be_Eda rat, 'N0'),
format(Tbl_Gobouz_Vosual_Deramed.GVD_Sard_Khone, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Naeloun, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Cover, 'N0'),
format(Tbl_Gobouz_Vosual_Deramed.GVD_Nemasaze, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Jame_Avery_V_ Ya_Zedofone_Ambolance, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Tashkel_Perva nde, 'N0'),
format(Tbl_Gobouz_Vosual_Deramed.GVD_Khedemat_Baz_ Kardan_Gabr_Amade, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Soder_Gavaye_ Sabt_Ahval, 'N0'),
format(Tbl_Gobouz_Vosual_Deramed.GVD_Soder_Gavaye_ Dafn, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Sodor_Sanad_H ag_Entgal_Az_Gabr, 'N0'), Tbl_Gobouz_Vosual_Deramed.GVD_Sayer_Title1,
format(Tbl_Gobouz_Vosual_Deramed.GVD_Sayer_Money1, 'N0'), Tbl_Gobouz_Vosual_Deramed.GVD_Sayer_Title2, format(Tbl_Gobouz_Vosual_Deramed.GVD_Sayer_Money2, 'N0'),
format(Tbl_Gobouz_Vosual_Deramed.GVD_Baste_Farhang e, 'N0'), Tbl_Medah.M_Name_Medah, format(Tbl_Gobouz_Vosual_Deramed.GVD_M_Money, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Jame_Kol1, 'N0'),
Tbl_Gobouz_Vosual_Deramed.GVD_Darsad_Maleyat, format(Tbl_Gobouz_Vosual_Deramed.GVD_Mablag_Maleya t, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Dafn, 'N0'),
format(Tbl_Gobouz_Vosual_Deramed.GVD_Pesh_Forosh, 'N0'), Tbl_Personial.P_Name + N' ' + Tbl_Personial.P_Last, Tbl_Personial_1.P_Name + N' ' + Tbl_Personial_1.P_Last,
format(Tbl_Gobouz_Vosual_Deramed.GVD_Integal, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Tashi, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Tvagof, 'N0'),
format(Tbl_Gobouz_Vosual_Deramed.GVD_Jame_Hazene2, 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Mablag_Takhfe f, 'N0'), Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Toze yat_Tekhfef,
format(Tbl_Gobouz_Vosual_Deramed.GVD_Mablag_Perdak hte, 'N0'), Tbl_Gobouz_Vosual_Deramed.GVD_Nahve_Perdakht, format(Tbl_Gobouz_Vosual_Deramed.GVD_Perdakht_Nagd , 'N0'),
format(Tbl_Gobouz_Vosual_Deramed.GVD_Perdakht_Card , 'N0'), format(Tbl_Gobouz_Vosual_Deramed.GVD_Monde, 'N0'),
CASE WHEN Tbl_Gobouz_Vosual_Deramed.GVD_Vazeyet_Perdakht = 1 THEN N'تسویه' ELSE N'بدهکار' END, Tbl_Users.U_U_Username
FROM Tbl_Personial INNER JOIN
Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr INNER JOIN
Tbl_Category_Motvafa ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_CM_I D = Tbl_Category_Motvafa.CM_ID INNER JOIN
Tbl_category_sex ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Sex = Tbl_category_sex.CTS_ID INNER JOIN
Tbl_EletePhot ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_ID_E let_Fot = Tbl_EletePhot.EPH_Id INNER JOIN
Tbl_Category_Mahal_Vogo_Fot ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_CMVF _ID = Tbl_Category_Mahal_Vogo_Fot.CMVF_ID INNER JOIN
Tbl_City ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Sock onet_C_ID = Tbl_City.C_ID INNER JOIN
Tbl_Ostan ON Tbl_City.C_O_ID = Tbl_Ostan.O_ID INNER JOIN
Tbl_City AS Tbl_City_1 ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Fot_ C_ID = Tbl_City_1.C_ID INNER JOIN
Tbl_Ostan AS Tbl_Ostan_1 ON Tbl_City_1.C_O_ID = Tbl_Ostan_1.O_ID INNER JOIN
Tbl_Category_Vazeyat_Gabr ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_CVG_ ID = Tbl_Category_Vazeyat_Gabr.CVG_ID INNER JOIN
Tbl_Category_Pay ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_CP_I D = Tbl_Category_Pay.CP_ID INNER JOIN
Tbl_Result_Tomp ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_RT_I D = Tbl_Result_Tomp.RT_ID INNER JOIN
Tbl_Bolog ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_ID_B olog = Tbl_Bolog.B_ID_Bolog INNER JOIN
Tbl_Users ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_U_Us ername = Tbl_Users.U_ID INNER JOIN
Tbl_Sanad ON Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_SHS_ ShomareSanad = Tbl_Sanad.S_Shomare_Sanad INNER JOIN
Tbl_Gobouz_Vosual_Deramed ON Tbl_Sanad.S_Shomare_Sanad = Tbl_Gobouz_Vosual_Deramed.GVD_SHS_ShomareSanad INNER JOIN
Tbl_Gabr ON Tbl_Sanad.S_Shomare_Sanad = Tbl_Gabr.G_S_Shomare_Sanad AND Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_CM_C ode_Mali = Tbl_Gabr.SM_CM_Code_Mali INNER JOIN
Tbl_NameGete ON Tbl_Gabr.SM_Name_Gete = Tbl_NameGete.NG_ID INNER JOIN
Tbl_Medah ON Tbl_Gobouz_Vosual_Deramed.GVD_M_ID = Tbl_Medah.M_ID ON Tbl_Personial.P_ID = Tbl_Gobouz_Vosual_Deramed.GVD_CVA_Code_Ranande INNER JOIN
Tbl_Personial AS Tbl_Personial_1 ON Tbl_Gobouz_Vosual_Deramed.GVD_CVA_Code_Ranande1 = Tbl_Personial_1.P_ID
WHERE ((SELECT dbo.MakeCompleteShmsiDate(Tbl_Sabt_Motovafy_Gabz_P esh_And_Sanad_Gabr.SM_Death, '/') AS Expr1) IS NOT NULL) AND (Tbl_Gabr.SM_Vazeyet = 1) AND
(Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Mah lsabtEtelat = @SM_MahlsabtEtelat)
ORDER BY Tbl_Gobouz_Vosual_Deramed.GVD_Shomare_Parvande DESC

این نیاز مشتری من هستش و بایستی به همه اطلاعات تحت شبکه بهش دسترسی داشته باشه و مشتری بنده 40 کیلو متر از بنده فاصله داره و روی سیستم خودش 30 ثانیه 189.448 تا رکورد لود کردم و روی سیستم خودم چون داشتم از سرورش دانلود میکردم تو 1 دقیقه توسط نرم افزار نه وب با IP لوکل نه با آدرس سروری امکانش هستش همچین تستی با EF بگیری و نظر بدید.
این هم بگم 189.448 تا رکورد بنده تبدیل تاریخ و همین طور تبدیل سه رغم اعشار و دستورات شرطی که داخل کوئری هام اضافه کردم انقدر زمان برد اگه اونها نباشن بدون اونها تست گرفتم تو یک تا 5 ثانیه 189.448 تا رکورد برای بنده لود شود
تمامی این مواردی که شما توسط sql انجام میدین من سمت کد نویسی C#‎ و توسط کلاس ها و پراپرتی ها انجام میدم و هیچ کاستی سرعتی هم در لود اطلاعات شاهد نیستم مزیت روش من نسبت به شما همونطور که دوستمون هم اشاره کردن اینه که من مسئولیت فیلدهای نمایشی رو میذارم به عهده کلاینت و از سمت سرور فقط فیلدهای خام رو واکشی میکنم ولی در روش شما همه کارها توسط سرور انجام میشه که خب این بار اضافه ای روی سرور هست.
اینم یه نمونه از روش بنده:
[NotMapped]
public string InvoiceDateDisplay { get { return ConvertDate.Converting.NumericDateWithClock(Invoic eDate, '/', true, true, false, false); } }

[NotMapped]
public string TotalPriceDisplay { get { return string.Format("{0:n0} تومان", TotalPrice); } }

[NotMapped]
public string TotalProductsDisplay { get { return string.Format("{0:n0} تومان", TotalPrice - ValueAddedPrice + Discount); } }

[NotMapped]
public string ValueAddedPriceDisplay { get { return string.Format("{0:n0} تومان", ValueAddedPrice); } }

[NotMapped]
public string DiscountDisplay { get { return string.Format("{0:n0} تومان", Discount); } }

[NotMapped]
public string SalesPriceDisplay { get { return string.Format("{0:n0} تومان", SalesPrice); } }

[NotMapped]
public string ModifiedDateDisplay { get { return ConvertDate.Converting.NumericDateWithClock(Modifi edDate, '/', true, true, false, false); } }

[NotMapped]
public string CategoryName { get { return Category != null ? Category.Name : "تعریف نشده"; } }

[NotMapped]
public string QuantityAndMeasureUnitDisplay { get { return MeasureUnit == null || Quantity == 0 ? string.Format("{0:n0}", Quantity) : string.Format("{0:n0} {1}", Quantity, MeasureUnit.Title); } }

[NotMapped]
public string SoldQuantityDisplay { get { return MeasureUnit == null || SoldQuantity == 0 ? string.Format("{0:n0}", SoldQuantity) : string.Format("{0:n0} {1}", SoldQuantity, MeasureUnit.Title); } }