PDA

View Full Version : سوال: میانگین گرفتن 38 تا 38 تا از رکوردها



aliramazani
جمعه 25 اردیبهشت 1394, 12:09 عصر
اگر نتیجه کوئری من 190 رکورد شامل عدد باشه میخوام هر 38 تا رکورد یه میانگین بگیره و یه جا ثبت کنه بعد بره سراغ 38 رکورد بعدی تا الی آخر.

نکته:

رکوردهای من مضربی از عدد 38 هستند.

جدول من دارای فیلد row یا id یا autonumber نیست. (امکان افزوده شدن هم نیست)

دیتابیس من اکسسه.

از ado.net استفاده میشه

aliramazani
جمعه 25 اردیبهشت 1394, 12:11 عصر
اگر نخوایم مجدد به دیتابیس کوئری بزنیم از ستون های دیتاگرید هم میشه اینکار رو کرد؟

parvizwpf
جمعه 25 اردیبهشت 1394, 12:16 عصر
تمام سطرها که لود شد، بعد یا حلقه فور به تیکه های 38 تایی تقسیم و کارتون رو انجام بدید

aliramazani
جمعه 25 اردیبهشت 1394, 12:18 عصر
شمارش گر حلقه for چیه؟

parvizwpf
جمعه 25 اردیبهشت 1394, 12:25 عصر
شما 38 تا 38 تا مقادیر خروجی کوئریتون رو بدید و یک متد بنویسید که کارش میانگینه . اول 38 تای اول بعد بعدیها و .... همینطوری اعداد رو 38 تا 38 تا بدید به اون متد میانگینه حساب کنه . شمارنده بستگی داره چطور کد بنویسید

aliramazani
جمعه 25 اردیبهشت 1394, 12:31 عصر
فرض کنید من 190 تا رکورد دارم که میشه 5 تا 38 تا.
حالا از کجا و چطوری به برنامه بگم تو شمارش اول 38 تا اولی را میانگین بگیر تو شمارش دوم 38تای دوم...
منظورم اینه چظور به برنامه بفهمونم از رکورد 0 تا 38 یا از 39 تا 76 ...

parvizwpf
جمعه 25 اردیبهشت 1394, 12:36 عصر
شما شمارندت میتونه بشه تعداد کل سطرها سپس توی فور وقتی به اندیس های مضرب 38 رسید حالا میانگین رو با تمام این 38 عدد انجام بدید و جوابها رو یکجا ذخیره کنید

aliramazani
جمعه 25 اردیبهشت 1394, 12:37 عصر
تست میکنم.
مرسی

ebrahim.rayatparvar
جمعه 25 اردیبهشت 1394, 13:17 عصر
شما میتونید از حلقه for تو در تو استفاده بکنید.


for(int i=0;i<grid.count/38;i++)
for(int j=0;j<38;j++)
{

}

به این روش هم میتونید کار کنید.

SabaSabouhi
شنبه 26 اردیبهشت 1394, 11:09 صبح
سلام
می‌تونی از LinQ استفاده کنی.


var list = datatable.Rows
.Cast<DataRow>()
.ToList()
while ( list.Any() ) {
var list2 = list.Take( 38 ).ToList();
. . .
list = list.Skip( list2.Count );
}

به این شکل می‌تونی داخل حلقه با list2 که تعداد 38 رکورد رو داره کار کنی ( مثلاً میانگین بگیری )
من این رو خواناتر از نوشتن حقله for می‌بینم.

صبا صبوحی

aliramazani
شنبه 26 اردیبهشت 1394, 12:34 عصر
سلام
می‌تونی از LinQ استفاده کنی.


var list = datatable.Rows
.Cast<DataRow>()
.ToList()
while ( list.Any() ) {
var list2 = list.Take( 38 ).ToList();
. . .
list = list.Skip( list2.Count );
}

به این شکل می‌تونی داخل حلقه با list2 که تعداد 38 رکورد رو داره کار کنی ( مثلاً میانگین بگیری )
من این رو خواناتر از نوشتن حقله for می‌بینم.

صبا صبوحی

تو پست اول گفتم که دیتابیس اکسسه و در اکسس نمیشه از linq استفاده کرد

SabaSabouhi
یک شنبه 27 اردیبهشت 1394, 13:30 عصر
تو پست اول گفتم که دیتابیس اکسسه و در اکسس نمیشه از linq استفاده کرد

سلام
هیچ ربطی نداره که Access باشه یا چیز دیگه. چیزی که من نوشتم در واقع LinQ نیست، بلکه LinQ Extension Method هست.
این توابع روی لیست‌ها کار می‌کنه.
همونطور که دیدی من لیستم رو از DataTable گرفتم. شما تو Access مگه نمی‌تونی DataTable بگیری؟
این کد رو امتحان کن و ببین که مثل بنز کار می‌کنه.
برای این که برات جالب‌تر بشه، یه مثال می‌زنم که ببینی دیگه چه کارهایی می‌شه انجام داد:

var str = "Saba Sabouhi";
str.ToList()
.Where( x=>x == 'a')
.Count();


اینجا دیگه دیتا و دیتابیس هم نداریم.
هر چیزی رو که بتونی تبدیل به لیست کنی، می‌تونی از LinQ Extension Methods استفاده کنی.
جالب بود، نه؟

صبا صبوحی