2012-10-20 17 views
12

मेरी प्रोजेक्ट में दो डेटाटेबल्स dtFail और dtFailed (dtFailed में कॉलम नाम घोषणाओं के अलावा कुछ भी नहीं है)। dtFail में डुप्लिकेट "कर्मचारी नाम" कॉलम मान हैं। तो मैं एक DataView dvFail ले गए और उन्हें अलग करने के लिए के रूप में नीचे दिए गए कोड में दिखाया प्रक्रिया किया:पंक्तियों को अलग और सभी कॉलम दिखा रहा है

dtFail

enter image description here

मैं नीचे दिए गए कोड की कोशिश की:

DataView dvFail = new DataView(dtFail); 
    dtFail = dvFail.ToTable(true, "EmployeeName"); //showing only one column in dtFail 

dtFailed (केवल एक कॉलम)

enter image description here

मैं की तरह नीचे

DataView dvFail = new DataView(dtFail); 
    dtFail = dvFail.ToTable(true, "EmployeeName","EmployeeRole","Status"); 

dtFailed (दिखा लेकिन डुप्लीकेट पंक्तियों साथ)

enter image description here

फिर datatable dtFailed नकल भंडारण है "करते हैं कर्मचारी नाम "भी।

कृपया
अग्रिम में धन्यवाद।

+0

अधिक जानकारी की आवश्यकता है - क्या आप कुछ नमूना डेटा पेस्ट कर सकते हैं यह दिखाते हुए कि आपकी डीवीएफईएल तालिका में डेटा क्या है? –

+0

@SachinShanbhag मेरे संपादित प्रश्न की जांच करें –

उत्तर

5

इस query-

DataTable distinctTable = originalTable.DefaultView.ToTable(/*distinct*/ true); 

अधिक जानकारी के लिए नीचे दिए गए हिट के लिए कड़ी

https://social.msdn.microsoft.com/Forums/en-US/ed9c6a6a-a93e-4bf5-a892-d8471b84aa3b/distinct-in-datatable-or-dataview?forum=adodotnetdataset

मुझे आशा है कि यह आप में मदद की है | का प्रयास करें।

0

मुझे यकीन नहीं है कि यह सहायक होगा या नहीं। जहां तक ​​मुझे आपके प्रश्न से मिलता है कि आप EmployeeName को अन्य कॉलमों के लिए अलग अप्रासंगिक मानना ​​चाहते हैं। लेकिन यदि आप ToTable करते हैं और अलग ध्वज चालू करते हैं तो यह सभी अलग-अलग पंक्तियां देगा, इससे कोई फर्क नहीं पड़ता कि वहां कितने कॉलम शामिल हैं। इसलिए यदि आप केवल कर्मचारी नाम का उल्लेख करते हैं तो यह स्पष्ट रूप से आपको अलग-अलग कर्मचारी नाम देगा, न कि इसके साथ जुड़े सभी कॉलम।

तो, मैंने जो किया है, प्रारंभ में केवल EmployeeName कॉलम का चयन करें और इसे एक अस्थायी डेटाटेबल डीटी में डालें।

DataTable dtt = dvFail.DefaultView.ToTable(true, "EmployeeName"); 

दूसरी बात मैं एक अस्थायी DataTable जहां हम मुख्य DataTable dtFail से अलग पंक्तियों डाल दिया और स्तंभ नाम मैन्युअल रूप से सेट बना लिया है।

DataTable TempDataTable = new DataTable(); 
DataTable dtFailed = new DataTable(); 

डीटीएफड डेटाटेबल में कॉलम तैयार करें।

 if (dtFailed.Columns.Count == 0) 
    { 
      dtFailed.Columns.Add("EmployeeName"); 
      dtFailed.Columns.Add("EmployeeRole"); 
      dtFailed.Columns.Add("Status"); 
      dtFailed.Columns.Add("Date"); 
    } 

अलग EmployeeName डीटीटी DataTable के माध्यम से लूप और EmployeeName से मेल खाते हैं और उस TempDataTable में first पंक्ति का चयन किया रहते हैं। अंत में सभी पंक्तियों को dtFailed में स्थानांतरित कर दिया।

 for (int j = 0; j < dtt.Rows.Count; j++) 
    { 
      string EmployeeName = dtt.Rows[j]["EmployeeName"].ToString(); 
      TempDataTable = dvFail.Select("EmployeeName = " + EmployeeName).CopyToDataTable(); 
      dtFailed.Rows.Add(TempDataTable.Rows[0].ItemArray); 
    } 
1

समाधान 1:

सवाल मेरी समझ है के आधार पर हमने EmployeeName के आधार पर डुप्लिकेट विचार करने की जरूरत है और हम अन्य स्तंभों के बारे में चिंता की जरूरत नहीं है। यदि समाधान नीचे दिया गया मामला बेहतर काम करता है।

foreach(DataRow r in dtFail.AsEnumerable()) 
    { 
    if (!dt1.AsEnumerable().Any(r1 => r1["EmployeeName"] == r["EmployeeName"])) 
     { 
    // if you don't want to copy entire row create new DataRow 
    // with required fields and add that row. 
     dt1.Rows.Add(r.ItemArray); 
     } 
    } 

यदि आप चाहते हैं कि आप dt1 को dtFail पर वापस डाल सकें।

समाधान 2:

हम अलग पंक्तियों मैं समाधान नीचे पसंद करते हैं पर विचार करने की जरूरत है।

var temp = dtFail.AsEnumerable().Distinct(); 
dtFail = temp.CopyToDataTable(); 
संबंधित मुद्दे