PDA

View Full Version : سوال: 10 رکورد برتر



kingtak
پنج شنبه 14 دی 1391, 19:02 عصر
سلام دوستان من یه برنامه کتابخانه نوشتم. یه دیتاگرید گذاشتم که میخوام 10 کتابی که بیشتر از همه خونده(کلیک) شدن رو لیست کنم.
چطور میتونم این کار رو انجام بدم؟

farazjalili
پنج شنبه 14 دی 1391, 19:11 عصر
سلام
یک پیشنهاد همین الان به ذهن خورد حالا نمی دونم تا چه حد درست باشه :
توی جدول کتاب هات یک فیلد درست کن که هرکی کتاب رو خوند یکی بهش اضافه کنه و موقع کوئری گرفتن هم از فیلدی که درست کردی کمک بگیر و شرط رو بگذار آن فیلدی که از همه بزرگتر هست رو نمایش بده و به همین صورت دومی و سومی و.........................

danialafshari
پنج شنبه 14 دی 1391, 19:52 عصر
سلام
بله جواب آقای farazjalili کاملا درست است فقط اضافه کنم که در query لازم نیست بزرگتر یا کوچکتر بزاری فقط کافیه فیلدی رو که دوستمون فرمودند رو Sort by رو روی Descending تنظیم کنید و از کوئریش استفاده کنی
موفق باشی

kingtak
پنج شنبه 14 دی 1391, 20:10 عصر
من این کار رو انجام دادم ولی خطا میده.
من هنوز تو ثبت کلیک ها موندم!!!!

BookTable bt = dataGrid3.SelectedItem as BookTable;
//PdfBrowserTest pdfReader = new PdfBrowserTest();
//pdfReader.webBrowser1.Navigate(bt.fileAddress);
//pdfReader.ShowDialog();
using (LibraryDataContext db = new LibraryDataContext())
{
var q = (from p in db.BookTables
where p.id == bt.id
select p.click).ToString();
if (!string.IsNullOrEmpty(q))
{
int i = int.Parse(q);
i++;
BookTable btt = new BookTable()
{
click = i
};
db.BookTables.InsertOnSubmit(btt);
db.SubmitChanges();
}

}


این کد رو هم تو رویداد لود برنامه گذاشتم.درسته؟


var best10 = (from p in db.BookTables
orderby p.click ascending
select p).Take(10);
dataGrid10Best.ItemsSource = best10;

samadblaj
پنج شنبه 14 دی 1391, 20:51 عصر
سلام مقدار فعلی click کتاب رو بذار توی یه متغییر یکی بهش اضاف کن و بعد دوباره ذخیره کن...

aliasghar2
پنج شنبه 14 دی 1391, 21:06 عصر
سلام
using (LibraryDataContext db = new LibraryDataContext()) {
var q = (from p in db.BookTables
where p.id == bt.id
select p.click).ToString();
if (!string.IsNullOrEmpty(q))
{
int i = int.Parse(q);
i++;
BookTable btt = new BookTable()
{
click = i
};
db.BookTables.InsertOnSubmit(btt);
db.SubmitChanges();
}

}

مگه نمی خای اپدیت کنی پس چرا داری دوباره اینسرت میکنی خب این خطای دابلیکیت میده فقط از sumbitChange استفاده کن درست میشه اینجوری تازه کدت هم غلطه

using (LibraryDataContext db = new LibraryDataContext()) {
var q = (from p in db.BookTables
where p.id == bt.id
select p.click).ToString();
if (!string.IsNullOrEmpty(q))
{


p.click++;

db.SubmitChanges();
}

}

aliasghar2
پنج شنبه 14 دی 1391, 21:08 عصر
اینو یادم رفت بگم
بهت پیشنهاد می کنم قبل از استفاده از linq اول اونو خوب یاد بگیری

kingtak
پنج شنبه 14 دی 1391, 21:19 عصر
اینو یادم رفت بگم
بهت پیشنهاد می کنم قبل از استفاده از linq اول اونو خوب یاد بگیری
درسته دوست عزیز
مشکل من اینه که دارم رو پروژه دانشگاهیم کار میکنم.چند روز دیگه هم باید تحولش بدم.واسه همین توی این فرصت کم نمیتونم بشینم یاد ببگیرم
در ضمن کلا کار کردن با c# رو 2/3 ماه نیست شروع کردم
خلاصه ببخسید شما رو هم اذیت میکنم!!!!!:خجالت:

kingtak
پنج شنبه 14 دی 1391, 21:23 عصر
using (LibraryDataContext db = new LibraryDataContext()) {
var q = (from p in db.BookTables
where p.id == bt.id
select p.click).ToString();
if (!string.IsNullOrEmpty(q))
{


p.click++;

db.SubmitChanges();
}

}

از این خط اررور میده.
مگه p رو میتونه بشناسه؟؟؟؟:متعجب:

aliasghar2
پنج شنبه 14 دی 1391, 21:28 عصر
منم قصد جسارت نداشتم

خیلی خوبه که پروژه رو خودت می نویسی و مثل خیلی ها نمیدی بیرون
کلا خواستم راهانمایی کنم چون استراتژی خوبی تو کد نویسی داری ولی با syntax اشنا نیستی

در ضمن یادگرفتن 3 عمل اصلی linq (درج - حدف - انتخاب ) زیاد زمانی نمیبره ولی می تونه واست کلی زمان رو بخره

aliasghar2
پنج شنبه 14 دی 1391, 21:29 عصر
ببخشید به جای p بزار q درست میشه

kingtak
پنج شنبه 14 دی 1391, 21:49 عصر
ببخشید به جای p بزار q درست میشه


Error 1 'string' does not contain a definition for 'click' and no extension method 'click' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?) C:\Users\Hamid\Documents\Visual Studio 2010\Projects\DigitalLibrary\DigitalLibrary\MainWi ndow.xaml.cs 99 27 DigitalLibrary


.ToString(); رو از کوئری حذف کردم ولی این بار یه خطای دیگه میده:



Error 3 'System.Linq.IQueryable<int?>' does not contain a definition for 'click' and no extension method 'click' accepting a first argument of type 'System.Linq.IQueryable<int?>' could be found (are you missing a using directive or an assembly reference?) C:\Users\Hamid\Documents\Visual Studio 2010\Projects\DigitalLibrary\DigitalLibrary\MainWi ndow.xaml.cs 99 27 DigitalLibrary


من خیلی با این کد ور رفتم.خیلی چیزارو هم امتحان کردم ولی نتونستم جواب بگیرم.مطمئنم یه سوتی ساده دارم میدم.


ممنون از لطفتون دوست علی اصغر جان.خودم هم تصمیم گرفتم بعد این ترم سی شارپ و linq رو از پایه شروع کنم یاد بگیرم.

aliasghar2
پنج شنبه 14 دی 1391, 22:03 عصر
خب این کد رو امتحان کن

using (LibraryDataContext db = new LibraryDataContext()) {
var q = (from p in db.BookTables
where p.id == bt.id
select p.click).single()
if (q!=null)
{


<b>p.clicks++;</b>

db.SubmitChanges();
}

}



بجای .tostring گداشتم .single که این باعث میشه فقط یه رکورد رو برگردونه
و به click یه s اضافه کردن چون click یک کلمه اصلی C#‎ ه و ممکنه اشتباه بشه بهتره اسم click رو تو بانکت عوض کنی البته خود linq میاد یه s اضافه میکنه

kingtak
پنج شنبه 14 دی 1391, 22:16 عصر
خب این کد رو امتحان کن

using (LibraryDataContext db = new LibraryDataContext()) {
var q = (from p in db.BookTables
where p.id == bt.id
select p.click).single()
if (q!=null)
{


<b>p.clicks++;</b>

db.SubmitChanges();
}

}



بجای .tostring گداشتم .single که این باعث میشه فقط یه رکورد رو برگردونه
و به click یه s اضافه کردن چون click یک کلمه اصلی C#‎‎ ه و ممکنه اشتباه بشه بهتره اسم click رو تو بانکت عوض کنی البته خود linq میاد یه s اضافه میکنه
بازم p رو نمشناسه.
در ضمن چون id کلید اصلیه فکر نکنم به .single نیاز باشه.درسته؟

aliasghar2
پنج شنبه 14 دی 1391, 22:16 عصر
البته من به سلکتش نگاه نکرده بودما:قهقهه:

aliasghar2
پنج شنبه 14 دی 1391, 22:18 عصر
ای بابا اون p رو بکن q :گیج:

kingtak
پنج شنبه 14 دی 1391, 22:54 عصر
ای بابا اون p رو بکن q :گیج:

ببخشید قبل اینکه صفحه رو refrash کنم پست زدم.جواب شمارو ندیده بودم:بامزه: