1 ضمیمه
Pageing با استفاده از LINQ
با سلام.
این مثال درباره پیاده سازی صفحه بندی توسط LINQ است.
کد های آن به صوت زیر است:
void PageDataBind(int Skip)
{
int take = 2;
dc = new MoviesDataContext();
var query = from m in dc.Movies select m;
int Counter = query.Count();
lblSum.Text = Counter.ToString();
List<myPageing> myP = new List<myPageing>();
for (int i = 0; i < Counter; i = i + take)
{
myP.Add(new myPageing { Value = i, Title = i + 1 });
}
Paging.DataSource = myP;
query = query.Skip(Skip).Take(take);
MovieRepeater.DataSource = query;
MovieGridView.DataSource = query;
MovieDataList.DataSource = query;
Page.DataBind();
}
به کمک Skip و Take میتوانیم عمل صفحه بندی را کنترل کنیم.
skip برای پرش رکورد ها ایت. به طور مثال اگر عدد 23 را به عنوان ورودی بگیرد از رک.رد 23 به بعد را بر میگرداند.
take تعداد رکورد های برگشت داده شده را مشخص میکند.
کد های زیر که از بدنه ی اصلی گرفته شده اند برای ایجاد دسترسی به صفحات هستند. که بعد از بدست آوردن تعداد کل رکورد ها بر اساس تعداد رکورد های برگشت داده شده صفحات را ایجاد میکند.
int Counter = query.Count();
lblSum.Text = Counter.ToString();
List<myPageing> myP = new List<myPageing>();
for (int i = 0; i < Counter; i = i + take)
{
myP.Add(new myPageing { Value = i, Title = i + 1 });
}
Paging.DataSource = myP
برای آموزش LINQ میتوانید به این تاپیک مراجعه کنید.
شاد باشید.
نقل قول: Paging با استفاده از LINQ
در حد یک مثال خوبه اما کاربرد عملی نداره چون تمامی رکوردها رو لود می کنه و این یک فاجعه برای حافظه است. Paging صحیح فقط از طریق Stored Procedure و متد Row_Number در SQL Server قابل انجام هست.
موفق باشید.
1 ضمیمه
نقل قول: Paging با استفاده از LINQ
نقل قول:
در حد یک مثال خوبه اما کاربرد عملی نداره چون تمامی رکوردها رو لود می کنه و این یک فاجعه برای حافظه است. Paging صحیح فقط از طریق Stored Procedure و متد Row_Number در SQL Server قابل انجام هست.
تشکر جناب راد.
هدفم استفاده از متد LINQ بود. فرمایش شما کاملا صحیحه در فایل ضمیمه همونطور که شما گفتید عمل شده و پیجینگ در بانک ساخته میشه. اما برای این کار دیگه به LINQ نیازی نیست درسته ؟ با همون دیتاست و ... میشه کار رو حل کرد.
نقل قول: Paging با استفاده از LINQ
LINQ to SQL یک ORM هست. قابلیت کار با Stored Procedureها رو هم داره. به SP به چشم یک متد نگاه می کنه. Data Context جزء اصلی کار با LINQ to SQL هست. اجرای SP از طریق Data Context انجام میشه.
سعی کن تا حد ممکن از DataSet استفاده نکنی.
موفق باشید.
نقل قول: Paging با استفاده از LINQ
نقل قول:
سعی کن تا حد ممکن از DataSet استفاده نکنی.
با تشکر جناب راد.
میشه در این رابطه که چرا از dataset نباید استفاده کرد توضیحاتی رو بدین و یا لینک آموزشی رو محبت کنید.
استفاده از LINQ to Dataset رو هم مناسب نمیدونید؟
نقل قول: Paging با استفاده از LINQ
برای بیان دلیل عدم استفاده از DataSet در ASP.NET به مقاله ی معروف برادر همیشه در صحنه، اسکات میشل، ارجاعت میدم:
http://www.4guysfromrolla.com/articles/050405-1.aspx
همین کافیه که بدونی چرا نباید از LINQ to DataSet استفاده کنی.
موفق باشید.
نقل قول: Paging با استفاده از LINQ
ممنونم قربان
شما همیشه نسبت به بچه های این سایت لطف داشتید.
سپاسگذارم.
نقل قول: Paging با استفاده از LINQ
نقل قول:
نوشته شده توسط
Behrouz_Rad
سعی کن تا حد ممکن از DataSet استفاده نکنی.
موفق باشید.
سلام آقای مهندس راد
مثل همیشه به موارد کلیدی اشاره می کنید.
به جای استفاده از DataSet از List<T> استفاده کنیم؟؟؟؟؟؟؟؟؟؟؟
نقل قول: Paging با استفاده از LINQ
نقل قول:
نوشته شده توسط mohsen_zelzela00
به جای استفاده از DataSet از List<T> استفاده کنیم؟
به جای استفاده از Typed DataSet، از Generic List و کلاس معادل موجودیت استفاده کن.
موفق باشید.
نقل قول: Paging با استفاده از LINQ
جناب راد استفاده از ORM در پروژه هایی که از sp استفاده می شه جایز می دونید؟
هر تغییر در بانک باید سمت برنامه هم انجام بشه آیا کار اضافی محسوب می شه یا محاسنی داره که به وقت و هزینه بیشتر می ارزه و اگه ORM چیز خوبی آیا ORM خواصی توصیه می کنید؟
مثل Nhibernate
نقل قول: Paging با استفاده از LINQ
لزوما قويترين ORM بهترين ORM براي هر فرد نيست . با توجه به ويژگيهاي پروژتون + ميزان تجربه مناسب ترين را انتخاب كنيد .
NHibernate براي پروژه هاي EnterPrise و بزرگ مناسبه .
نقل قول: Paging با استفاده از LINQ
من معمولا از ORM استفاده نمی کنم چون کویری سمت برنامه ندارم می خواستم بدونم کار درستی می کنم یا مپینگ حسنایی داره که به دردسرش می ارزه، توی مقاله ای که آقای راد گذاشتن دیتا ریدر و دیتاست با هم مقایسه شده بودن ولی چیزی که هست دیتا ریدر آفلاین نیست بنابراین نیاز به استفاده با جنریک برای پر کردن اطلاعات داره آیا زمان پر کردن جنریک با زمان پر شدن دیتاست حدودا یکسان نیست؟
دوست دارم بیشتر در این موارد بحث کنیم
نقل قول: Paging با استفاده از LINQ
نقل قول:
نوشته شده توسط
iman_ad
جناب راد استفاده از ORM در پروژه هایی که از sp استفاده می شه جایز می دونید؟
هر تغییر در بانک باید سمت برنامه هم انجام بشه آیا کار اضافی محسوب می شه یا محاسنی داره که به وقت و هزینه بیشتر می ارزه و اگه ORM چیز خوبی آیا ORM خواصی توصیه می کنید؟
مثل Nhibernate
یکی از قابلیت های اصلی ORMها، کار با SPها است. در این حالت، ORM به عنوان یک واسط برای اجرای SP عمل می کنه.
در استفاده از ORMها بین افراد مختلف اختلاف نظر زیادی وجود داره. بعضی ها معماری خاص خودشون رو دارن و برخی دیگه به ORMها اطمینان کامل دارن (مثل StackOverflow.com).
طبق نظر سنجی که چند وقت پیش خوندم، NHibernate بیشترین محبوبیت رو داره و بعد از اون LINQ to SQL هست.
به هر حال، آدمی سلایق مختلفی داره. شما امتحان کن ببین کدوم روش به مذاقت خوش میاد ;)
موفق باشید
نقل قول: Paging با استفاده از LINQ
نقل قول:
نوشته شده توسط
iman_ad
من معمولا از ORM استفاده نمی کنم چون کویری سمت برنامه ندارم می خواستم بدونم کار درستی می کنم یا مپینگ حسنایی داره که به دردسرش می ارزه، توی مقاله ای که آقای راد گذاشتن دیتا ریدر و دیتاست با هم مقایسه شده بودن ولی چیزی که هست دیتا ریدر آفلاین نیست بنابراین نیاز به استفاده با جنریک برای پر کردن اطلاعات داره آیا زمان پر کردن جنریک با زمان پر شدن دیتاست حدودا یکسان نیست؟
دوست دارم بیشتر در این موارد بحث کنیم
منم دوست دارم بحث کنیم اما سوالتون ارتباطی با موضوع تاپیک نداره. لطفاً بر طبق موضوع تاپیک پیش برید.
ممنون.
نقل قول: Paging با استفاده از LINQ
نقل قول:
نوشته شده توسط
Behrouz_Rad
به جای استفاده از Typed DataSet، از Generic List و کلاس معادل موجودیت استفاده کن.
موفق باشید.
من برای paging از برنامه گرید آقای راد استفاده کردم . خوب در اون برنامه از آبجکت dataset استفاده شده بود . آیا اون شیوه بهینه نیست ؟؟
نقل قول: Paging با استفاده از LINQ
iman_ad@:
برادر لطف کن سوالتو و کلا مباحث مرتبط با سوالت رو در یه تاپیک جدید ادامه بده...
ممنون.
نقل قول: Paging با استفاده از LINQ
نقل قول:
نوشته شده توسط
shocraneh
من برای paging از برنامه گرید آقای راد استفاده کردم . خوب در اون برنامه از آبجکت dataset استفاده شده بود . آیا اون شیوه بهینه نیست ؟؟
وقتی میگی "برنامه ی Grid آقای راد"، اینجور در ذهن تداعی میشه که اون برنامه فقط یک نسخه داره در صورتی که اون پروژه، 7 نسخه داره. نسخه ی 7 رو دانلود کن تا متوجه منظورم بشی.
موفق باشید.
نقل قول: Paging با استفاده از LINQ
نقل قول:
نوشته شده توسط
Behrouz_Rad
وقتی میگی "برنامه ی Grid آقای راد"، اینجور در ذهن تداعی میشه که اون برنامه فقط یک نسخه داره در صورتی که اون پروژه، 7 نسخه داره. نسخه ی 7 رو دانلود کن تا متوجه منظورم بشی.
موفق باشید.
راستش من با ویبی کار می کنم نسخه آخر سی شارپ است .راستش خیلی روش وقت نزاشتم .
نقل قول: Paging با استفاده از LINQ
نقل قول:
نوشته شده توسط
Behrouz_Rad
در حد یک مثال خوبه اما کاربرد عملی نداره چون تمامی رکوردها رو لود می کنه و این یک فاجعه برای حافظه است. Paging صحیح فقط از طریق Stored Procedure و متد Row_Number در SQL Server قابل انجام هست.
موفق باشید.
سلام ،
اگر چه متد ارائه شده توسط ايجاد كننده تاپيك بهينه نيست و گفته آقاي راد صحيح هست ولي با جمله دوم ايشون مخالفم .
ما ميتونيم از طريق Linq to Sql هم Paging واقعي رو پياده سازي كنيم و محدود به استفاده از Stored Procedure نيستيم .
در مثال زير Paging ما بهينه هست :
public void bindProducts(int startrow)
{
DataClassesDataContext db = new DataClassesDataContext();
var products = from p in db.Products
where p.Order_Details.Count > 2
select new
{
ID = p.ProductID,
Name = p.ProductName,
numOrders = p.Order_Details.Count,
revenue = p.Order_Details.Sum(o => o.UnitPrice * o.Quantity),
};
GridView1.DataSource = products.Skip(startrow).Take(10);
GridView1.DataBind();
}
علت هم به خاطر اين هست كه Linq از deferred execution استفاده ميكند ، بعبارتي تا زماني كه درون داده هاي برگشتي Iterate نكنيم ، يا به كنترلهاي داده Bind نكنيم Query بر روي بانك داده اجرا نميشود
نقل قول: Paging با استفاده از LINQ
با حرف جناب Lastphoenix کاملاً موافقم.
من قبلاً Paging رو با LinqDatasource و GridView تست کردم و در SQL Profiler دیدم که بصورت هوشمند در ساخت Query از Row_Number استفاده میشه.
نقل قول: Paging با استفاده از LINQ
براي اينكه شك تون به يقين تبديل بشه به گفته Scott Guttire ارجاعتان ميدم :
We can use the Skip() and Take() methods below to indicate that we only want to return 10 product objects - starting at an initial product row that we specify as a parameter argument:
Note above how I did not add the Skip() and Take() operator on the initial products query declaration - but instead added it later to the query (when binding it to my GridView datasource). People often ask me "but doesn't this mean that the query first grabs all the data from the database and then does the paging in the middle tier (which is bad)?" No. The reason is that LINQ uses a deferred execution model - which means that the query doesn't actually execute until you try and iterate over the results.