PDA

View Full Version : عدد تصادفی ( رندم ) غیر تکراری بر اساس سال شمسی



mohammad2407
شنبه 21 بهمن 1391, 22:38 عصر
سلام دوستان عزیز من میخوام بعد از زدن کلید یک پیام لود بشه و یک عدید پنج الی شش رقمی غیر تکراری به من بده

و دو رقم اول این عدد سال شمسی باشه و به طور خودکار به سال جدید اپدیت بشه

مثال :

91359

و بعد این عدید میخوام در دیتابیس ذخیره کنم ..


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

مهرداد صفا
یک شنبه 22 بهمن 1391, 09:08 صبح
با سلام
1- با استفاده از PersianCalendar خارج قسمت تقسیم سال جاری را بر صد (91 یا 92...) محاسبه کرده و در متغیری نگه میداریم:

int year = (new System.Globalization.PersianCalendar()).GetYear(Da teTime.Now) % 100;


2- یک نمونه از کلاس Random می سازیم:

Random rand=new Random();

3- یک عدد تصادفی از سال جاری ضرب در 10000 و کوچکتر از همین عدد به علاوه 10000 تولید می کنیم:

int RandomNumber = rand.Next(year * 10000, (year + 1) * 10000);

4- تا زمانی که عدد تولید شده در پایگاه داده ثبت شده است مرحله 3 را تکرار می کنیم و در غیر این صورت به مرحله 5 می رویم.
5- عدد را نمایش داده و در پایگاه ثبت می کنیم.

mohammad2407
یک شنبه 22 بهمن 1391, 14:27 عصر
دوست عزیز من واقعا ممنونم خیلی لطف کردی توضیحی هم که دادی عالی بود

فقط یک سوال تکراری که تولید نمیکنه ؟ چون میخوام برای کد رهگیری استفاده کنم

بعد یک سوال دیگه با تغییر سال 91 تغییر میکنه یعنی اگر وارد سال 92 شدیم خودش به صورت خودکار تغییر میکنه دیگه درسته ؟

باز هم ممنونم خیلی خیلی لطف کردی :بوس::بوس::بوس::بوس::بوس::بوس:: وس::بوس::بوس::بوس::بوس::بوس::ب س::بوس::بوس::بوس::بوس::بوس::بو ::بوس::بوس:

plus
یک شنبه 22 بهمن 1391, 14:56 عصر
دوست عزیز من واقعا ممنونم خیلی لطف کردی توضیحی هم که دادی عالی بود

فقط یک سوال تکراری که تولید نمیکنه ؟ چون میخوام برای کد رهگیری استفاده کنم

بعد یک سوال دیگه با تغییر سال 91 تغییر میکنه یعنی اگر وارد سال 92 شدیم خودش به صورت خودکار تغییر میکنه دیگه درسته ؟


تصادفی، تصادفیه و میتونه تکراری باشه.میتونید از Guid استفاده کنید.ولی، دلیل خاصی داره که میخواین تصادفی باشه؟ به نظرم بهتره از یک عددی مثلا 100 (واسه سه رقمی بودن) شروع کنید یکی یکی اضافه کنید...

mohammad2407
یک شنبه 22 بهمن 1391, 15:02 عصر
من میخوام کد رهگیری تولید کنم !! یعنی نباید تکراری باشه حالا فرقی نمیکنه سه رقمی یا شش و یا 10 رقمی

من میخوام تحت هیچ شرایطی تکراری نباشه

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

plus
یک شنبه 22 بهمن 1391, 15:04 عصر
دوست عزیز خوب از 1 شروع کنید و هر بار یکی بهش اضافه کنید تا عدد بعدی بدست بیاد.البته، اگه ویژگی قابل حدس بودنش مطرح نباشه و در ضمن، عدد آخر رو جایی ذخیره داشته باشید.

mohammad2407
یک شنبه 22 بهمن 1391, 15:21 عصر
من میخوام یک کد تولد بشه که با 91 شروع بشه فرقی هم نمیکنه چند رقم باشه

مثال

91001
91002
91003
91004
.
.
.
.
91010

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

amirviator
شنبه 12 اسفند 1391, 01:46 صبح
این persian calender از کجا اومده یکی توضیح بده لطفا؟؟؟؟؟؟؟

FastCode
شنبه 12 اسفند 1391, 02:34 صبح
Birthday Problem
و
Birthday Attack
رو در ویکیپدیا مطالعه کنید

Tiam121
شنبه 12 اسفند 1391, 09:25 صبح
این persian calender از کجا اومده یکی توضیح بده لطفا؟؟؟؟؟؟؟
using system.globalization;

Tiam121
شنبه 12 اسفند 1391, 09:28 صبح
همونجوری که دوستان گفتن خیلی راحت میتونی با persian calender فقط سال جاری رو بگیری بعد با یه عدد N رقمی که یکی یکی اضاف میشه و دیگه تکراری هم نیست جمع کنی اینجوری عددت همیشه منحصر بفرده

FastCode
شنبه 12 اسفند 1391, 09:41 صبح
کار از پایه خرابه.
اگر کد رو به صورت ترتیبی بدید در دو اجرای برنامه کد تکراری ایجاد میشه.
برای ایجاد کد رهگیری غیر تکراری فقط میتوید از دیتابیس استفاده کنید.

Tiam121
شنبه 12 اسفند 1391, 10:23 صبح
کار از پایه خرابه.
اگر کد رو به صورت ترتیبی بدید در دو اجرای برنامه کد تکراری ایجاد میشه.
برای ایجاد کد رهگیری غیر تکراری فقط میتوید از دیتابیس استفاده کنید.

بدون دیتابیس که نمیشه و با هر بار اجرای برنامه همه چیز بهم میریزه و خراب میشه عددها هم تکراری میشن
حتی با دیتابیس هم اگه برنامه تحت شبکه باشه باید این مسئله رو چک کرد که اگر دو کاربر همزمان بخوان کد بگیرن کد تکراری صادر نشه

FastCode
شنبه 12 اسفند 1391, 12:38 عصر
بدون دیتابیس که نمیشه و با هر بار اجرای برنامه همه چیز بهم میریزه و خراب میشه عددها هم تکراری میشن
حتی با دیتابیس هم اگه برنامه تحت شبکه باشه باید این مسئله رو چک کرد که اگر دو کاربر همزمان بخوان کد بگیرن کد تکراری صادر نشه
خب پس غیر تکراری بودنش دیگه چیه؟
یا باید الگوریتم رندوم قوی باشه.
یا دیتابیس استفاده بشه.
با یکیش نیازی به دیگری نیست.
وقتی دیتابیس باشه لازم نیست الگوریتم رندوم بنویسید که بخواهید دنبال دقت بالا باشید.

پ.ن.
به این میگن سوالی که جوابش توی خودشه.

Tiam121
شنبه 12 اسفند 1391, 13:04 عصر
خب پس غیر تکراری بودنش دیگه چیه؟
یا باید الگوریتم رندوم قوی باشه.
یا دیتابیس استفاده بشه.
با یکیش نیازی به دیگری نیست.
وقتی دیتابیس باشه لازم نیست الگوریتم رندوم بنویسید که بخواهید دنبال دقت بالا باشید.


پ.ن.
به این میگن سوالی که جوابش توی خودشه.

منم منظورم این نبود که هم دیتابیس هم رندوم مسئله تحت شبکه رو مطرح کردم چون تو برنامه تحت شبکه کنترل خواندن اطلاعات و اضاف کردن اطلاعات به جدول با تک کاربره تفاوت داره و باید لحاظ بشه

mohammad2407
دوشنبه 28 اسفند 1391, 16:11 عصر
من یک جدول دارم به نام tahvil در این جدول فیلدی وجود داره به نام rhg یا همون کد رهگیری !!!

به کد زیر من شماره رهگیری میسازم و بعد در فیلد بالا ذخیره میکنم

int year = (new System.Globalization.PersianCalendar()).GetYear(Da teTime.Now) % 100;
Random rand=new Random();
int RandomNumber = rand.Next(year * 10000, (year + 1) * 10000);

کد ذخیره سازی به صورت LINQ هست که در زیر مشخص هست

var db = new tahvilDataContext();
tahvil tb = new tahvil()
{
Name = _name,
LastName = _lastname,
Car = _car,
SHNamber = _shnamber,
tarikh = _Datetahvil,
Description = _des,
rhg = _rhg,
Datepc = _datepc,
Timepc = _Time,
user = FullName

};
db.tahvils.InsertOnSubmit(tb);
db.SubmitChanges();
dataGridView1.DataSource = db.tahvils;



حالا میخوام بدونم چند درصد احتمال تولید کد و یا شماره تکراری در کد بالا ( قسمت اول ) وجود داره

نظرتون در مورد کد زیر چیه ؟


string password = string.Empty;
for (int i = 0; i < 6; i++)
{
string temp = new Random().Next(10).ToString();
while (password.IndexOf(temp) != -1)
temp = new Random().Next(10).ToString();
password += temp;
}
label1.Text = password.ToString();

Mahmoud.Afrad
دوشنبه 28 اسفند 1391, 19:41 عصر
میتونی hashcode بگیری:

System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
...
rhg = pc.GetYear(DateTime.Now).ToString().Substring(2,2) + Guid.NewGuid().GetHashCode();
...

S.Reza
دوشنبه 28 اسفند 1391, 20:13 عصر
ببین اگر سایز فیلد در دیتابیس مهم هست مجبوری خودت کد تولید کنی و بهترین حالت هم همان اعداد پشت سر هم هست که باید یکسری محدودیت ها رو هم در نظر بگیرید ( تعلق نگرفتن یک عدد به دو نفر به صورت همزمان و . . . . )

اما اگر سایز فیلد در دیتابیس مهم نیست Guid استفاده کن و به خودت دردسر نده و تقریبا ( هیچ چیز 100% نیست ) مطمئن باش عدد تکراری تولید نخواهد شد

اگر هم میخواهی دو عدد اول با سال شروع بشود سال رو به صورت رشته بدست بیار بعد به ابتدای رشته اضافه کن

مثال ساده


StringBuilder Sb = new StringBuilder();
Sb.Append("91"); // year
Sb.Append(Guid.NewGuid().ToString("N").Substring(2));

mohammad2407
دوشنبه 28 اسفند 1391, 20:15 عصر
اقا محمود این دیگه تکراری تولید نمیکنه ؟

الان بعد از سال یک عدد 10 رقمی تولید میشه ، ایا میشه تعداد ارقام کمتر یا بیشتر کرد ؟

Mahmoud.Afrad
دوشنبه 28 اسفند 1391, 20:30 عصر
میتونی ستون کد رهگیری رو حذف کنی و کلید اصلی رو به عنوان کد رهگیری در نظر بگیری.

C#‎_best_Programmer
دوشنبه 28 اسفند 1391, 20:42 عصر
دادش اگه هدفت کد رهگیری یه الگوریتم درست کن مثلا تارخ من میام شکاره شناسنامه رو تک تک اعدادش و تو رندوم نکست می کنم

mohammad2407
دوشنبه 28 اسفند 1391, 21:31 عصر
اقا یه الگوریتم به ما بدید که احتمال تولید کد تکراری خیلی خیلی کم باشه

mohammad2407
دوشنبه 28 اسفند 1391, 21:37 عصر
اقا محمود چرا الگوریتم کد ها با هم فرق داره

مثال دومی خط فاصله داره

9121012386
91-21012345

Mahmoud.Afrad
سه شنبه 29 اسفند 1391, 01:54 صبح
اقا محمود چرا الگوریتم کد ها با هم فرق داره

مثال دومی خط فاصله داره

9121012386
91-21012345
خروجی متد GetHashCode عدد صحیحه پس عدد منفی هم میتونه باشه که با تبدیل به رشته به خط فاصله تبدیل میشه.



چند تا راه دیگه:
rhg = DateTime.Now.Ticks.ToString();

و یا از متد زیر استفاده کنی:

private ulong GetUniqueDigits()
{
byte[] bytes = Guid.NewGuid().ToByteArray();
double r1 = BitConverter.ToUInt64(bytes, 0);
double r2 = BitConverter.ToUInt64(bytes, 8);
return (ulong)System.Math.Pow(r1, r2);
}


و یا متد زیر که میاد Guid رو به معادل دهدهی تبدیل میکنه:

private ulong GetUniqueDigits2()
{
ulong unique = 0;
string guid = Guid.NewGuid().ToString().Replace("-", string.Empty);
ulong temp = 0;
ulong powered = 0;
ulong nu = 0;
for (int i = 0, j = guid.Length - 1; i < guid.Length && j >= 0; i++, j--)
{
switch (guid[j])
{
case 'a':
temp = 10; break;
case 'b':
temp = 11; break;
case 'c':
temp = 12; break;
case 'd':
temp = 13; break;
case 'e':
temp = 14; break;
case 'f':
temp = 15; break;

default:
temp = Convert.ToUInt16(guid[j].ToString()); break;
}

powered = (ulong)System.Math.Pow(16d, Convert.ToDouble(i));

nu = temp * powered;
unique += Convert.ToUInt64(nu);
}
return unique;
}

mohammad2407
جمعه 02 فروردین 1392, 17:56 عصر
اقا محمود دیگه من نمیخوام رندم تولید کنم میخوام بر اساس شماره قبلی ذخیره شده کد تولید کنم

مثال

00001
00002
00010
00100
01000
99999

تا اخر

این روش خیلی بهتره

من میخوام موقع کد رهگیری بره بانک چک کنه و به قبلی یکی اضافه کنه !!!
ممنون

mohammad2407
یک شنبه 04 فروردین 1392, 17:16 عصر
من یک بار دیگه توضیح میدم

من یک رکورد در دیتابیس دارم با کد رهگیری 225 حالا الان میخوام یک رکورد جدید ثبت کنم میخوام کد رهگیری به من بده 226 و رکورد های بعدی هم به این ترتیب باشه

به این روش 100 درصد تکراری نمیده :لبخند:

Mahmoud.Afrad
یک شنبه 04 فروردین 1392, 18:19 عصر
همونطور که قبلا گفتم ستون کد رهگیری رو حذف کن و کلید اصلی جدول رو به عنوان کد رهگیری استفاده کن یعنی بعد از ثبت در دیتابیس میتونی id رکوردی که ثبت میکنی رو بدست بیاری(البته اگر کلیداصلی به صورت خودکار مقدارش زیاد میشه).
مثال:

tbl t = new tbl() { firstname = "a", lastname = "aa" };
context.tbls.InsertOnSubmit(t);
context.SubmitChanges();

MessageBox.Show("کد رهگیری: " + t.id);

همونطور که میبینی بعد از SubmitChanges میتونی مقدار id رو بخونی.

mohammad2407
یک شنبه 04 فروردین 1392, 18:19 عصر
خواهشا جواب بدید . به خدا خسته شدم :ناراحت:

FastCode
یک شنبه 04 فروردین 1392, 18:23 عصر
91 رو در دیتابیس ذخیره نکن.
از AutoIncrement استفاده کن.

mohammad2407
یک شنبه 04 فروردین 1392, 18:25 عصر
اهان یعنی از ID به عنوان کد رهگیری استفاده کنم ؟

خب اقا محمود اینطوری یک سری مشکلات به وجود میاد .

مثلا اگر اون رکورد حذف شد . شماره حذف شده رو به بعدی نمیده

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

یعنی بهش بگم چند رقم باشه !

با سال شروع بشه و ...

میشه کاری کرد که از ای دی استفاده نکرد ؟

plus
یک شنبه 04 فروردین 1392, 18:37 عصر
اهان یعنی از ID به عنوان کد رهگیری استفاده کنم ؟

خب اقا محمود اینطوری یک سری مشکلات به وجود میاد .

مثلا اگر اون رکورد حذف شد . شماره حذف شده رو به بعدی نمیده

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

یعنی بهش بگم چند رقم باشه !

با سال شروع بشه و ...

میشه کاری کرد که از ای دی استفاده نکرد ؟

طبیعتا اگه یک رکورد حذف بشه نباید از کد رهگیریش برای رکورد جدید بعدی استفاده باشه...کد رهگیری منحصر به اون به رکورد حذف شده بوده..
کدی که هر بار یکی بهش اضافه میشه رو نمیتونید بگین همیشه طولش ثابت باشه چون زیاد میشه، ولی میتونید برای AutoIncrement، مقدار اولیه تعیین کنید و بگین اول کار چند رقم باشه...
در مورد اینکه با سال شروع بشه هم، میشه با بررسی هایی، هربار که که لازم شد، مقدار AutoIncrement رو با یک دستور SQL به دستی تغییر داد البته این کار باید با بررسی بشه که در ترتیب ID ها و ... مشکلی ایجاد نکنه.

FastCode
یک شنبه 04 فروردین 1392, 18:40 عصر
SET IDENTITY_INSERT table name ON/OFF
۳ ۴ سالی میشه که از این دستور استفاده نکردم.
احتمالا درست نوشتم

mohammad2407
یک شنبه 04 فروردین 1392, 18:43 عصر
اینو میدونم

من از IDENTITY برای فیلد ID استفاده کردم

من میخوام کد رهگیری با سال شروع بشه .

و بعد از سال هم مشکلی نداره همون ID باشه .

mohammad2407
یک شنبه 04 فروردین 1392, 19:14 عصر
الان من ای دی می گیرم و به اول اون تاریخ اضافه میکنم وبعد در یک فیلد دیگه ذخیره میکنم

حالا یک سوال چطوری میشه کاری کرد که اگر سال عوض شد یعنی از 92 شدیم 93 اون بیاد ای دی صفر کنه و از صفر به بعد از دوباره بزنه ؟؟؟؟

مثال ::

912
913
914
915
و..

حالا سال عوض میشه

میخوام تغییر بده به شکل زیر

921
922
923
923
924
925
9...

Mahmoud.Afrad
یک شنبه 04 فروردین 1392, 20:29 عصر
اصلا برای چی میخوای همچین کاری انجام بدی؟ چه فرقی میکنه به ترتیب باشه یا نباشه؟ چه فرقی میکنه اولش با سال شروع بشه یا نشه؟ برای جستجو میخوای؟
اگر برای جستجو میخوای، به جای این همه دردسر میتونی فیلد کلیداصلی رو به عنوان کدرهگیری بگیری و یک ستون هم برای تاریخ ثبت اضافه کنی که برای گزارش گیری هم مشکلی نداشته باشی.





اما در هر صورت برای این کاری که میخوای باید یک ستون کدرهگیری از نوع bigint داشته باشی (همون rhg).
باید سال حال حاضر رو بدست بیاری.
باید تعداد رکوردهایی که با این سال شروع میشن رو بدست بیاری. اگر هیچ رکوردی با این سال شروع نشده بود سال را ضرب در 10 کرده و ثبت میکنی.
اگر قبلا رکوردی ثبت شده بود که با این سال شروع میشه ، بزرگترین مقدار کدرهگیری رو بدست میاری و به رشته تبدیل میکنی و با substring اعداد سمت راست رو بدست میاری به عدد تبدیل میکنی . یکی بهش اضافه میکنی و بعد با سال ترکیب میکنی و بعد از تبدیل به عدد ثبت میکنی.
مثال:

tbl t = new tbl() { firstname = "a", lastname = "aa" };

System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
int year = pc.GetYear(DateTime.Now);

int countItemsStartWithCurrentYear = context.tbls.Count(item => item.rhg.ToString().StartsWith(year.ToString()));
if (countItemsStartWithCurrentYear == 0)
{
t.rhg = year * 10;
}
else
{
string rightDigitOfMaxRhg = context.tbls.Max(item => item.rhg).ToString().Substring(4);
int newRightDigits = int.Parse(rightDigitOfMaxRhg) + 1;
t.rhg = Int64.Parse(year.ToString() + newRightDigits.ToString());
}

context.tbls.InsertOnSubmit(t);
context.SubmitChanges();

mohammad2407
دوشنبه 05 فروردین 1392, 01:31 صبح
اقا محمود ممنون از لطف شما .

علت این کار : ما یک سری اطلاعات مشتری وارد سیستم میکنیم و بعد سیستم به ما یک کد رهگیری میده ! حالا برای چی . این شماره رهگیری روی یک برگه نوشته میشه و بایگانی میشه بین خیلی از برگه ها و زونکن ها

شاید باورد نشه سال 90 الی 91 ما نزدیک به 6000 برگه بایگانی کردیم . حالا چرا میگم سال اول کد رهگیری باشه که وقتی مشتری میاد میگه من پلاکمو و یا بیمه و یا ... نگرفتم من میام شماره شاسی اون مشتری در سیستم میزنم ( همین برنامه ) و کد رهگیری نگاه میکنم و کد رهگیری به من باید خیلی اطلاعات بده که برم بین 6000 برگه برگه اونو مشتری پیدا کنم ؟؟؟؟؟؟؟ اگر شما الگوریتم بهتری داری برای پیدا کردن اون برگه ممنون میشم بدونم و منو راهنمایی کنید

پدر بنده برنامه نویس حرفه ای فاکس پرو هست

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

حالا برنامه پدر من به چه شکل عمل میکنه هنگام ساخت کد رهگیری

برنامه میره آخرید عدد ثبت شده رو چک میکنه و یکی به اون اضافه میکنه و سالی هم که هستیم به اول اون کد اضافه میکنه ( ولی خب اون دیگه منسوخ شده )

کد زیر هم یک مقدار منو گیج کرد چند قسمت خطا داره

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



var db = new tahvilDataContext();

tahvil tb = new tahvil();
tb.Name = _name;
tb.LastName = _lastname;
tb. Car = _car;
tb. SHNamber = _shnamber;
tb. tarikh = _Datetahvil;
tb. Description = _des;
tb.rhg = namber;
tb. Datepc = _datepc;
tb. Timepc = _Time;
tb. user = FullName;

System.Globalization.PersianCalendar pcc = new System.Globalization.PersianCalendar();
int yearr = pcc.GetYear(DateTime.Now);

int countItemsStartWithCurrentYear = db.tahvils.Count(item => item.rhg.ToString().StartsWith(yearr.ToString()));
if (countItemsStartWithCurrentYear == 0)
{
tb.rhg = yearr * 10;
}
else
{
string rightDigitOfMaxRhg = db.tahvils.Max(item => item.rhg).ToString().Substring(4);
int newRightDigits = int.Parse(rightDigitOfMaxRhg) + 1;
tb.rhg = Int64.Parse(yearr.ToString() + newRightDigits.ToString());
}
db.tahvils.InsertOnSubmit(tb);
db.SubmitChanges();
dataGridView1.DataSource = db.tahvils;


و از قسمت های زیر ایراد میگیره :

Int64.Parse(yearr.ToString() + newRightDigits.ToString());

yearr * 10;

خطا ها

Error 1 Cannot implicitly convert type 'int' to 'string'

Error 2 Cannot implicitly convert type 'long' to 'string'


راستی اقا محمود خروجی کدوم میشه

Mahmoud.Afrad
دوشنبه 05 فروردین 1392, 07:21 صبح
توی این مثال ستون rgh باید در دیتابیس از نوع bigint باشه نه رشته.
مقادیر هم به صورت زیر ثبت میشن:
13920
13921
....
139210
.......
13931
13932
....

mohammad2407
دوشنبه 05 فروردین 1392, 16:49 عصر
بله از نوع bigintقرار دادم ولی باز همون خطا های بالا رو میده

khokhan
دوشنبه 05 فروردین 1392, 17:13 عصر
سلام

از محضر اساتید خیلی عذر می خوام من این نمونه رو برای یه بنده خدایی ساخته بودم

روال کار اینطوری هستش که آخرین کد ثبت شده در بانک رو می گیره یه دونه می ذاره روش وکد جدید رو به عنوان شماره فاکتور جدید در لیبل نشون می ده

وهنگام ثبت اطلاعات شماره فاکتور که در لیبل نمایش داده شده در بانک ثبت می شه و دفعه بعد همینطور الی آخر

گفتم شاید یه وقت به کارتون بیاد:لبخند:

Mahmoud.Afrad
دوشنبه 05 فروردین 1392, 23:46 عصر
بله از نوع bigintقرار دادم ولی باز همون خطا های بالا رو میده
باید مدل LinqToSql رو هم آپدیت کنی.

mohammad2407
سه شنبه 06 فروردین 1392, 03:50 صبح
باید مدل LinqToSql رو هم آپدیت کنی. :اشتباه:

اقا محمود مرسی دقیقا همونی هست که میخوام

حالا یک مشکل در جستجو برام پیش امده

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



string srch = txtserch.Text;
var db = new tahvilDataContext();
if (srch == "")
{
dataGridView1.DataSource = db.tahvils;
return;
}

var query = db.tahvils.Where(c => c.Name.Contains(srch) || c.LastName.Contains(srch) || c.Car.Contains(srch) || c.SHNamber.Contains(srch) || c.rhg.Contains(srch) || c.Datepc.Contains(srch) || c.Timepc.Contains(srch) || c.tarikh.Contains(srch) || c.Description.Contains(srch));
if (query.Count() == 0)
{

PMessageBox.Show(" هیچ داده ای یافت نشد ", "پیام سیستم ", PMessageBoxButtons.OK, PMessageBoxIcons.Warning);
}
else
{
dataGridView1.DataSource = query;//bining

}


الان داره از

c.rhg.Contains(srch)

ایراد میگیره

حالا یک چیز دیگه

اگر بخوام بعد از سال ماه و روز رو اضافه کنم به چه صورت میشه

مثال :

139201060

1392 که به رنگ قرمز هست سال هست
01 ماه هست
06 هم روز هست
0 هم کد رهگیری

باز هم ممنون

Mahmoud.Afrad
سه شنبه 06 فروردین 1392, 19:32 عصر
در جستجو: متد Contains روی رشته عمل میکنه نه عدد:c.rhg.ToString().Contains(srch)



برای اضافه کردن روز و ماه:

tbl t = new tbl() { firstname = "a", lastname = "aa" };

System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime dt = DateTime.Now;
string year = pc.GetYear(dt).ToString();
string month = pc.GetMonth(dt).ToString("00");
string day = pc.GetDayOfMonth(dt).ToString("00");

int countItemsStartWithCurrentYear = context.tbls.Count(item => item.rhg.ToString().StartsWith(year.ToString()));
if (countItemsStartWithCurrentYear == 0)
{
t.rhg = uint.Parse(year + month + day) * 10;
}
else
{
string rightDigitOfMaxRhg = context.tbls.Max(item => item.rhg).ToString().Substring(8);
uint newRightDigits = uint.Parse(rightDigitOfMaxRhg) + 1;
t.rhg = Int64.Parse(year + month + day + newRightDigits.ToString());
}

context.tbls.InsertOnSubmit(t);
context.SubmitChanges();