PDA

View Full Version : جستجو بین دو تاریخ شمسی + LINQ



vapa_71
یک شنبه 02 تیر 1392, 12:22 عصر
سلام
دوستان من تاریخ رو به صورت شمسی و به صورت رشته ای (10) مثل 1392/04/02 ذخیره کردم و از تکنولوژی Linq هم استفاده میکنم حالا میخوام داده های بین 2 تاریخ شمسی رو بدست بیارم اگه میشه کمک کنید

از کد زیر برای یک تاریخ مشخص استفاده میکنم


var db = new LINQDataContext();
dataGridView1.DataSource = db.factors.Where(c => c.fdate.Substring(0, textBox1.Text.Length) == textBox1.Text).Select(c => c);

Mahmoud.Afrad
یک شنبه 02 تیر 1392, 12:56 عصر
این پست (http://barnamenevis.org/showthread.php?358539-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AF%D8%B1-%D9%82%D8%B3%D9%85%D8%AA%DB%8C-%D8%B4%D8%B1%D8%B7%DB%8C-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-Linq&p=1607783&viewfull=1#post1607783) جواب دادم.

vapa_71
یک شنبه 02 تیر 1392, 13:01 عصر
این پست (http://barnamenevis.org/showthread.php?358539-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AF%D8%B1-%D9%82%D8%B3%D9%85%D8%AA%DB%8C-%D8%B4%D8%B1%D8%B7%DB%8C-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-Linq&p=1607783&viewfull=1#post1607783) جواب دادم.

ممنون دوست عزیز میشه یکم توضیحش بدی ؟

vapa_71
یک شنبه 02 تیر 1392, 13:02 عصر
context.tbl
این چیه ؟ جدولمون هست ؟

Mahmoud.Afrad
یک شنبه 02 تیر 1392, 13:18 عصر
ممنون دوست عزیز میشه یکم توضیحش بدی ؟
همون پست رو آپدیت کردم.

mohammad-bahrami
یک شنبه 02 تیر 1392, 13:22 عصر
string date1='1392/01/01';
string date2='1392/05/01'
var u = DB.ExecuteQuery<factor>(@"SELECT factor.* FROM factor where fDate between {1} and {2}",date1, date2());

vapa_71
یک شنبه 02 تیر 1392, 13:22 عصر
همون پست رو آپدیت کردم.

الان من اسم جدول رو اضافه کردم اما توی کد نویسی زیرش خط قرمز کشیده

vapa_71
یک شنبه 02 تیر 1392, 13:24 عصر
گیج شدم این کد جدید چیه ؟ :افسرده:

vapa_71
یک شنبه 02 تیر 1392, 13:38 عصر
string date1='1392/01/01';
string date2='1392/05/01'
var u = DB.ExecuteQuery<factor>(@"SELECT factor.* FROM factor where fDate between {1} and {2}",date1, date2());


این کد هم ارور میده

Mahmoud.Afrad
یک شنبه 02 تیر 1392, 13:38 عصر
الان من اسم جدول رو اضافه کردم اما توی کد نویسی زیرش خط قرمز کشیده
کد خودتو بزار

vapa_71
یک شنبه 02 تیر 1392, 13:45 عصر
کد خودتو بزار

من اینطور گذاشتم اشتباهم کجاست ؟


var result = from p in factor
where string.Compare(p.fdate, textBox1.Text) <= 0 // p.date >= textBox1.Text
&& string.Compare(p.fdate, textBox2.Text) >= 0 // p.date <= textBox2.Text
select p;

ashkan1234
یک شنبه 02 تیر 1392, 13:56 عصر
سلام!
اگه میخوای بین دو تاریخ مقایسه انجام بدی اون اسلشها مانع کارت میشن!
بهتره اول اونارو replace کنی با string.empty یا ("") بعد هم بگی تاریخی رو نمایش بده که بزرگتر یا مساوی تاریخ اول هستند && کوچکتر یا مساوی تاریخ دوم!
راستی بهتره اول replace شدشونو بریزی تو یه متغیر int!
البته راههای راحتر هم هست!ولی به نظرم این روش خطا توش نداره

Mahmoud.Afrad
یک شنبه 02 تیر 1392, 14:04 عصر
من اینطور گذاشتم اشتباهم کجاست ؟


var result = from p in factor
where string.Compare(p.fdate, textBox1.Text) <= 0 // p.date >= textBox1.Text
&& string.Compare(p.fdate, textBox2.Text) >= 0 // p.date <= textBox2.Text
select p;
به جای factor نام کانتکس رو قرار بدید(db.factors)

vapa_71
یک شنبه 02 تیر 1392, 14:07 عصر
به جای factor نام کانتکس رو قرار بدید(db.factors)

دیتا گرید رو به این شکل پر کنم ؟


dataGridView1.DataSource = result;

vapa_71
یک شنبه 02 تیر 1392, 14:08 عصر
الان به این شکله اما نتیجه خالیه

var db = new LINQDataContext();
var result = from p in db.factors
where string.Compare(p.fdate, textBox2.Text) <= 0 // p.date >= textBox1.Text
&& string.Compare(p.fdate, textBox3.Text) >= 0 // p.date <= textBox2.Text
select p;
dataGridView1.DataSource = result;

vapa_71
یک شنبه 02 تیر 1392, 14:11 عصر
ببخشید خیلی مزاحمتون شدم این p چی هست ؟

Mahmoud.Afrad
یک شنبه 02 تیر 1392, 14:48 عصر
ببخشید خیلی مزاحمتون شدم این p چی هست ؟
یه متغیر هست. مثل c که در پست اول خودت نوشتی. شکل دیگرش توسط توابع توسعه به صورت زیر هست:
var result = db.factors.Where(p => string.Compare(p.fdate, textBox2.Text) <= 0 && string.Compare(p.fdate, textBox3.Text) >= 0);

vapa_71
یک شنبه 02 تیر 1392, 14:53 عصر
مرسی محمود جان من جای تکس باکس ها رو اشتباه کرده بودم . مگه تکس باکس اول تاریخ کمتر نباید باشه ؟ الان تاریخ بیشتر بهش دادم درست عمل کرد

واقعا ممنونم محمود جان خیلی گلی دستت درد نکنه

Mahmoud.Afrad
یک شنبه 02 تیر 1392, 14:59 عصر
اگر به کامنت هایی که در کد قرار دادم توجه میکردی همون اول حل بود.
میتونی جای تکست باکس ها رو در کد عوض کنی.

mousa1992
سه شنبه 15 مرداد 1392, 17:47 عصر
همونطور که میدونید اولین شکل متد compare دو پارامتر ورودی میپذیره. اگر پارامتر اول با پارامتر دوم برابر باشه این متد 0 برمیگردونه. اگر پارامتر اول از پارامتر دوم بزرگتر بود -1 و اگر پارامتر اول از پارامتر دوم کوچکتر بود +1 برمیگردونه.


سلام محمود جان
از object browser ویژوال سرچی انجام دادم تو توضیحات متد Compare نوشته بود در صورتی که پارامتر اول بزرگتر از دوم باشه مقدار بزرگتر از صفر برمیگردونه و اگه کمتر ، کمتر از صفر و برابر هم که 0 میشه
و توی تستی که خودم انجام دادم هم به همین نتیجه رسیدم ؛ اما برا سرچ بین دو تاریخ به مشکل برخوردم! نمیدونم مشکل از کجاست - لینک (http://barnamenevis.org/showthread.php?412743-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%D9%87%D8%A7-%D8%A8%D8%B1-%D8%A7%D8%B3%D8%A7%D8%B3-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE&p=1842392#post1842392)

موفق باشید

Mahmoud.Afrad
سه شنبه 15 مرداد 1392, 18:35 عصر
سلام محمود جان
از object browser ویژوال سرچی انجام دادم تو توضیحات متد Compare نوشته بود در صورتی که پارامتر اول بزرگتر از دوم باشه مقدار بزرگتر از صفر برمیگردونه و اگه کمتر ، کمتر از صفر و برابر هم که 0 میشه
و توی تستی که خودم انجام دادم هم به همین نتیجه رسیدم ؛ اما برا سرچ بین دو تاریخ به مشکل برخوردم! نمیدونم مشکل از کجاست - لینک (http://barnamenevis.org/showthread.php?412743-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%D9%87%D8%A7-%D8%A8%D8%B1-%D8%A7%D8%B3%D8%A7%D8%B3-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE&p=1842392#post1842392)

موفق باشید
این قسمت به خاطر اینکه کنترل ها روی فرمم جابجا بود به خاطر همین توی کوئری جای تکست باکس ها برعکس بود(البته کوئری با توجه به ترتیب تکست باکس های من درست بود) باعث شد منم اشتباه توضیح بدم. کد رو اصلاح کردم.

vapa_71
یک شنبه 22 دی 1392, 20:37 عصر
var db = new linqDataContext();
var result = db.Table3s.Where(p => string.Compare(p.date, textBox2.Text) <= 0 && string.Compare(p.date, textBox1.Text) >= 0);

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