PDA

View Full Version : سوال: حذف ردیفهای یک دیتاتیبل از دیتاتیبل دیگر بوسیله یک ستون مشترک



barman.ar16
پنج شنبه 04 مرداد 1397, 11:34 صبح
سلام دوستان و اساتید

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

دیتاتیبل اولم این شکلیه (برای مثال) :

148599

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

و دیتاتیبل دومم اینه :

148600

خب با توجه به عکس در واقع کدهای 11 و 33 و 77 در جدول اول و در جدول دوم مشابه هستند

در واقع من میخوام نتیجه کار توی دیتاتیبل سوم ذخیره بشه به نحوی که از دیتاتیبل اول هر دو ستون رو فراخوانی کنم که تا اینجاش رو بلدم و نکته مهم تر اینکه بر اساس ستون اول من بیام
اون مشترکات دیتاتیبل دوم رو از دیتاتیبل اول حذف کنم

به عبارت ساده تر کل داده های ستون اول از دیتاتیبل اول در نتیجه لحاظ بشن به غیر مواردی که در دیتاتیبل دوم هستند
نتیجه به صورت عکس :

148601

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

barman.ar16
جمعه 05 مرداد 1397, 11:56 صبح
از اساتید و دوستان کسی نمیتونه این مورد رو کمک کنه
ممنون از همگی

ali_md110
جمعه 05 مرداد 1397, 13:39 عصر
شما میتونید دیتاتیبل هاتون تبدیل به لیست کنید و از LINQ کمک بگیرید


var dt1 = table1.AsEnumerable().ToList();
var dt2 = table2.AsEnumerable().ToList();



سپس با یک Select کدهاتون تبدیل به آرایه کنید و از توابع LINQ بهره بیرید جستجویی بزیند با این شزط که :کدهایی در جدول 1 که در جدول 2 وجود ندارند


var getId = dt2.Select(s => s["KOD"]).ToArray();
var dt3 = dt1.Where(x => !getId.Contains(x["KOD"])).ToList();



یا بدینصورت هم میتونید


var table3 = table1.Copy();
table3.AcceptChanges();
table3.Merge(table2);
var dt5 = from row in table3.AsEnumerable()
where row.RowState != DataRowState.Modified
select row;


میتونید از تابع تفاضل هم استفاده کنید


var dt = table1.AsEnumerable().Except(table2.AsEnumerable() , DataRowComparer.Default).ToList();

336699
جمعه 05 مرداد 1397, 13:57 عصر
از این کد هم می توانی استفاده کنی



DataTable table3 = new DataTable();
var ERC1 = table1.AsEnumerable().Select(a => new { kod = a["kod"].ToString() });
var ERC2 = table2.AsEnumerable().Select(b => new { kod = b["kod"].ToString() });
var exceptAB = ERC1.Except(ERC2);
table3 = (from dRow in table1.AsEnumerable()
join ab in exceptAB on dRow["kod"].ToString() equals ab.kod
select dRow).CopyToDataTable();


148610