PDA

View Full Version : سوال: انتخاب گروهی از پایگاه داده || LINQ



hadimtn
دوشنبه 21 دی 1394, 01:53 صبح
سلام؛
در قسمتی از پروژه نیاز دارم که پرس و جوهایی به شکل زیر رو انجام بدم؛

138313

بر فرض مثال می‌خوام گرانترین کالاها رو به تعداد 15 عدد لیست کنم!
یا 15 کالای پر سود رو لیست کنم، نه همه‌ی کالا رو !
لطفاً اگه امکان داره نمونه کد قرار بدین !
(جدولی تحت عنوان کالاهای فروخته شده وجود دارد که همه ی اطلاعات مورد نیاز توش ذخیره میشه! مثلا قیمت خرید و فروش برای محاسبه ی پر سودترین و کم سود ترین !)

hadimtn
چهارشنبه 23 دی 1394, 21:22 عصر
به عنوان مثال برای یکی از جستجوها، مثلاً پرسودترین، با کد زیر جستجو رو انجام دادم؛



var ProfitableQuery = (from f in db.SaledTables
orderby (f.OutPrice - f.InPrice) descending
select f).Take(15);
fAReportViewer_DataGridView.DataSource = ProfitableQuery;



نتیجه‌ی جستجو:

138370

1. حالا چه جوری میتونم سطرهای تکراری رو از نتیجه ی جستجو مستثنا کنم؟!
شرط تکراری بودن کالاها برابری Object، Brand، Inprice، OutPrice در سطرها می‌باشد.

2. در جستجوی بر اساس تعداد فروش هم باید ستون Number ادغام بشه و یکی از سطرها نمایش داده بشه!

نکته:
1. این جستجو در بین کالاهای فروخته شده انجام می‌شود، دلیل تکرار سطرها نیز به همین دلیل است؛
2. قیمت خرید و فروش در شرط تکرار نیز به علت احتمال تغییر (تخفیف، هدیه و ...) در قیمت خرید و فروش در طول دوره های مختلف می‌باشد.

hadimtn
دوشنبه 19 بهمن 1394, 00:41 صبح
1. حالا چه جوری میتونم سطرهای تکراری رو از نتیجه ی جستجو مستثنا کنم؟!
شرط تکراری بودن کالاها برابری Object، Brand، Inprice، OutPrice در سطرها می‌باشد.


جواب سوال اول رو میذارم که اگه کسی به این مشکل برخورد، کارش راه بیافته؛



var ProfitableQuery = (from f in db.SaledTables
select new
{
f.Object,
f.Brand,
f.InPrice,
f.OutPrice
}).Distinct().OrderByDescending(f => f.OutPrice - f.InPrice).Take(7);

Mahmoud.Afrad
دوشنبه 19 بهمن 1394, 17:24 عصر
برای ادغام سطرها، باید براساس ستونهایی که داده تکراری دارند گروهبندی کنید. و در زمان سلکت ، تعداد و سود و ... رو از طریق متد Sum برای هر گروه بدست بیارید.
من ساختار جداول شما رو ندارم ولی حدودا مثل کد زیر:

var query =
from t in db.tbls
group t by new {t.@object, t.brand}
into groupResult
select new
{
groupResult.Key.@object,
groupResult.Key.brand,
Sum = groupResult.Sum(i => i.outPrice - i.inPrice)
};