نقل قول: مقایسه دو datatable
خودم این روشو نوشتم ولی حس میکنم میشه بهتر از اینم نوشت. برا افزایش سرعت . چون برای مثال 100*1000 ببینید چندبار حلقه اجرا میشه.
bool state = false;
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt2.Rows.Count;j++)
{
if (dt.Rows[i]["TajhizatId"].ToString().Equals(dt2.Rows[j]["TajhizatId"].ToString()))
{
if (dt.Rows[i]["Nobat"].ToString().Equals(dt2.Rows[j]["Nobat"].ToString()))
{
if (dt.Rows[i]["BarCode"].ToString().Equals(dt2.Rows[j]["BarCode"].ToString()))
{
state = true;
}
else
{
state = false;
}
}
}
}
}
MessageBox.Show(state.ToString());
نقل قول: مقایسه دو datatable
چه ستونی مقادیر یکتا داره؟
نقل قول: مقایسه دو datatable
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
چه ستونی مقادیر یکتا داره؟
تو این جدول فقط ستون نوبت تغییر میکنه. بقیه ستونها ثابتا" - یعنی ستون کد بررسی و کد تجهیز و بارکد باهم یکتا هستن.
در کل هدفی که دارم اینه که یکبار یک کاری انجام شده که جدول یک تولید شده و ثبت شده. کاربر میاد و دوباره همون کار رو میکنه و جدول یک رو میسازه اما قبل ثبت ما میایم جدول دو رو استخراج میکنیم و اینجا بررسی میکنیم که اگه جدول یک قبلا ثبت شده دیگه اجازه همچین کاری رو به کاربر ندیم.
نقل قول: مقایسه دو datatable
نقل قول:
نوشته شده توسط
رامین مرادی
تو این جدول فقط ستون نوبت تغییر میکنه. بقیه ستونها ثابتا" - یعنی ستون کد بررسی و کد تجهیز و بارکد باهم یکتا هستن.
در کل هدفی که دارم اینه که یکبار یک کاری انجام شده که جدول یک تولید شده و ثبت شده. کاربر میاد و دوباره همون کار رو میکنه و جدول یک رو میسازه اما قبل ثبت ما میایم جدول دو رو استخراج میکنیم و اینجا بررسی میکنیم که اگه جدول یک قبلا ثبت شده دیگه اجازه همچین کاری رو به کاربر ندیم.
سوالی که پیش میاد اینه که
ممکن هست فقط یکی از ردیفهای جدول یک داخل جدول دوم باشه ، در این صورت نتیجه true میشه.
اونوقت شما از کجا تشخیص میدی کدوم ردیف بوده و کدام ردیف نبوده؟ یا اینکه مهم نیست یک ردیف یا تمام ردیفهای جدول یک داخل جدول دوم باشند؟
نقل قول: مقایسه دو datatable
نقل قول:
نوشته شده توسط
336699
سوالی که پیش میاد اینه که
ممکن هست فقط یکی از ردیفهای جدول یک داخل جدول دوم باشه ، در این صورت نتیجه true میشه.
اونوقت شما از کجا تشخیص میدی کدوم ردیف بوده و کدام ردیف نبوده؟ یا اینکه مهم نیست یک ردیف یا تمام ردیفهای جدول یک داخل جدول دوم باشند؟
نه خب باید عینا اگه تمامی رکوردهای جدول 1 در جدول 2 بود اطلاع بده نه اینکه فقط یکی.
نقل قول: مقایسه دو datatable
از این روش استفاده کنید
نام گذاری جدول ها رو بر اساس شکل بالا انجام دادم (خودتان اصلاح نمایید)
روش کار به این صورت هست که ابتدا تعداد ردیفهای مشترک در جدول یک و جدول دوم رو بدست می آوریم
سپس این عدد بدست آمده رو با تعداد ردیفهای جدول یک مقایسه میکنم اگر برابر بود یعنی تمام ردیفهای جدول یک در جدول دوم وجود دارد و نتیجه true میشود
واگر برابر نبود یعنی فقط بعضی از ردیفهای جدول یک در جدول دوم وجود دارد و نتیجه false میشود
int EqualRows = (DT1.AsEnumerable().Where(a => DT2.AsEnumerable().Any(b => (a["BarCode"].ToString() == b["BarCode"].ToString())))).Count();
if (EqualRows == DT1.Rows.Count)
{
state = true;
}
else
{
state = false;
}
نقل قول: مقایسه دو datatable
نقل قول:
نوشته شده توسط
336699
از این روش استفاده کنید
نام گذاری جدول ها رو بر اساس شکل بالا انجام دادم (خودتان اصلاح نمایید)
روش کار به این صورت هست که ابتدا تعداد ردیفهای مشترک در جدول یک و جدول دوم رو بدست می آوریم
سپس این عدد بدست آمده رو با تعداد ردیفهای جدول یک مقایسه میکنم اگر برابر بود یعنی تمام ردیفهای جدول یک در جدول دوم وجود دارد و نتیجه true میشود
واگر برابر نبود یعنی فقط بعضی از ردیفهای جدول یک در جدول دوم وجود دارد و نتیجه false میشود
int EqualRows = (DT1.AsEnumerable().Where(a => DT2.AsEnumerable().Any(b => (a["BarCode"].ToString() == b["BarCode"].ToString())))).Count();
if (EqualRows == DT1.Rows.Count)
{
state = true;
}
else
{
state = false;
}
ممنون دوست عزیز. فقط شما فقط چرا اسم یک ستون رو اینجا قید کردید؟! من باید همشونو بنویسم؟ شرمنده اینقدر مبتدیانه میگم من تا حالا لینک کار نکردم.:لبخندساده:
نقل قول: مقایسه دو datatable
نقل قول:
نوشته شده توسط
رامین مرادی
ممنون دوست عزیز. فقط شما فقط چرا اسم یک ستون رو اینجا قید کردید؟! من باید همشونو بنویسم؟ شرمنده اینقدر مبتدیانه میگم من تا حالا لینک کار نکردم.:لبخندساده:
وقتی هر سه ستون یکتا هستند
دیگر نیازی نیست هر سه ستون چک بشه
یکی از ستون ها چک بشه کافیه.
نقل قول: مقایسه دو datatable
نقل قول:
نوشته شده توسط
336699
وقتی هر سه ستون یکتا هستند
دیگر نیازی نیست هر سه ستون چک بشه
یکی از ستون ها چک بشه کافیه.
سه ستون باهم یکتا هستن. مثلا این بارکد میتونه تکراری باشه ( یعنی ستون کد بررسی و کد تجهیز و بارکد باهم یکتا هستن.
)
تو پست شماره 4 هم گفتم.
نقل قول: مقایسه دو datatable
نقل قول:
نوشته شده توسط
رامین مرادی
سه ستون باهم یکتا هستن. مثلا این بارکد میتونه تکراری باشه (
یعنی ستون کد بررسی و کد تجهیز و بارکد باهم یکتا هستن.
)
تو پست شماره 4 هم گفتم.
الان مشکل کجاست ؟ :متفکر:
نقل قول: مقایسه دو datatable
نقل قول:
نوشته شده توسط
رامین مرادی
سه ستون باهم یکتا هستن. مثلا این بارکد میتونه تکراری باشه (
یعنی ستون کد بررسی و کد تجهیز و بارکد باهم یکتا هستن.
)
تو پست شماره 4 هم گفتم.
شرطهای دیگر را با && اضافه کنید.
با استفاده از متد all میتونید بررسی کنید که همه سطرهای اولی در دومی هم باشند.(در آرایه ها اندیس ستونها را قرار بدید)
bool state =
dt1.AsEnumerable().All(dt1Row =>
dt2.AsEnumerable().Any(dt2Row =>
dt2Row.ItemArray[0].Equals(dt1Row.ItemArray[0]) &&
dt2Row.ItemArray[1].Equals(dt1Row.ItemArray[1]) &&
dt2Row.ItemArray[2].Equals(dt1Row.ItemArray[2])
)
);