কিভাবে একটি ডেটাতেবলের মধ্যে স্বতন্ত্র সারি নির্বাচন করতে হয় এবং একটি অ্যারেতে সঞ্চয় করা যায়


167

আমার একটি ডেটাসেট আপত্তি আছে। আপত্তিগুলিতে টেবিল 1 নামের একটি সারণী রয়েছে। টেবিল 1 এ প্রসেসনাম নামের কলাম রয়েছে। এই প্রসেসনামটিতে বারবার নাম রয়েছে o সুতরাং আমি কেবলমাত্র স্বতন্ত্র নাম নির্বাচন করতে চাই thisএটি সম্ভব।

  intUniqId[i] = (objds.Tables[0].Rows[i]["ProcessName"].ToString());

নমুনা কোড পোস্ট করুন, আপনার নীচে করা একটি মন্তব্য থেকে মনে হচ্ছে উত্তরটি আপনি যে ক্যোয়ারির সাথে কাজ করছেন তার সুনির্দিষ্টতার উপর নির্ভর করে।
ম্যাথিউমার্টিন

উত্তর:


359
DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...);


আমার যদি দুটি কলাম "মো" এবং "নাম" থাকে তবে আমার স্বতন্ত্র "মো" পাওয়া দরকার তবে স্বতন্ত্র "নাম" নয় তবে আমার কলামটি "নাম" আমার ডেটেটেবেলে রাখা দরকার আমি কী করব?
ব্যবহারকারী 7291

1
@ জোসিলিন এলকৌরি, সত্যিকার অর্থে তা বোঝা যায় না ... তাহলে "নাম" এর কোন মূল্য আপনি রাখবেন?
টমাস লেভস্কে

@ থমাস লেভসেক কোনটিই গুরুত্বপূর্ণ নয় ... আসুন আমরা বলি যে
নামেরটির

17
ঠিক আছে, তারপরে আপনার গ্রুপিং দরকার, স্বতন্ত্র নয়। আপনি লিনাক টু ডেটাসেটের মাধ্যমে এটি করতে পারেন:table.AsEnumerable().GroupBy(row => row.Field<int>("mo")).Select(group => group.First()).CopyToDataTable()
টমাস

148

কোডের একক লাইনটি কোনওটির সদৃশ সারিগুলি এড়াবে DataTable:

dataTable.DefaultView.ToTable(true, "employeeid");

কোথায়:

  • প্রথম প্যারামিটারটি ToTable()একটি বুলিয়ান যা আপনাকে স্বতন্ত্র সারিগুলি চায় কিনা তা নির্দেশ করে।

  • এর দ্বিতীয় প্যারামিটারটি ToTable()হল কলামের নাম যার ভিত্তিতে আমাদের স্বতন্ত্র সারি নির্বাচন করতে হবে। কেবল এই কলামগুলিই ফিরিয়ে দেওয়া ডেটাটেবলের মধ্যে থাকবে।

DataSetএকটি নির্দিষ্ট থেকে অ্যাক্সেসের মাধ্যমেও এটি করা যেতে পারে DataTable:

dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");

5
আমি এই উত্তরটি সর্বাধিক পছন্দ করি, কারণ এটি DefaultViewক এর সম্পত্তিকে নির্দেশ করে DataTable
ইয়ান বয়ড

আমার যদি দুটি কলামের ভিত্তিতে স্বতন্ত্র হওয়া দরকার?
এলসিজে

1
@ লিজো, ToTable(boolean, params string[] columnNames)পদ্ধতিটি একাধিক কলাম নির্দিষ্ট করার অনুমতি দেয়।
ক্রিস্টেন হাম্ম্যাক

57
DataTable dt = new DataTable();
dt.Columns.Add("IntValue", typeof(int));
dt.Columns.Add("StringValue", typeof(string));
dt.Rows.Add(1, "1");
dt.Rows.Add(1, "1");
dt.Rows.Add(1, "1");
dt.Rows.Add(2, "2");
dt.Rows.Add(2, "2");

var x = (from r in dt.AsEnumerable()
        select r["IntValue"]).Distinct().ToList();

30

লিনকিউ সহ (। নেট 3.5, সি # 3)

var distinctNames = ( from row in DataTable.AsEnumerable()
 select row.Field<string>("Name")).Distinct();

 foreach (var name in distinctNames ) { Console.WriteLine(name); }

15

আপনি এটির মতো ব্যবহার করতে পারেন:

data হয় DataTable

data.DefaultView.ToTable(true, "Id", "Name", "Role", "DC1", "DC2", "DC3", "DC4", "DC5", "DC6", "DC7");  

তবে কর্মক্ষমতা কমবে। নীচে কোড ব্যবহার করার চেষ্টা করুন:

data.AsEnumerable().Distinct(System.Data.DataRowComparer.Default).ToList();  

পারফরম্যান্সের জন্য; http://onerkaya.blogspot.com/2013/01/distinct-dataviewtotable-vs-linq.html


13
var distinctRows = (from DataRow dRow in dtInventory.Rows
                                select dRow["column_name"] ).Distinct();

var distinctRows = (from DataRow dRow in dtInventory.Rows
                                select dRow["col1"], dRow["col2"].. ).Distinct();

@ অ্যাডি লেস্টার: সম্ভবত নতুন {কল 1 = ডিআর ["কোল 1"], কল 2 = ডি রো ["কল 2"], ...}) নির্বাচন করুন ist বিলোপ (); আরও সঠিক?
এরিক

আপনার যখন সবেমাত্র একটি তালিকা রয়েছে <ড্যাটাআর> আপনি এটি করতে পারেন: var পরীক্ষা = (ভিএম-তে DataRow dRow থেকে .. লাইভএলসেটস dRow ["manname"] নির্বাচন করুন Dist
pat capozzi

প্রথম লাইন কাজ করে। দ্বিতীয়টি, যেমন ইউরিক উল্লেখ করে না, তবে উরিক এর মতো কাজ করে না যেমন ডিসট্রিন্ট () বেনামে প্রকারের সাথে বস্তু-তুলনা করার সময় সমতা পাবে না।
অ্যালান বালজেউ

9

উপরের উত্তরটির উন্নতি করতে: ডেটাভিউতে টুটেবল ফাংশনটিতে একটি "স্বতন্ত্র" পতাকা রয়েছে।

//This will filter all records to be distinct
dt = dt.DefaultView.ToTable(true);

1
এটি কাজ করে না। এটিতে একটি পৃথক বুলিয়ান প্যারামিটার সহ একটি মাত্র ওভারলোড রয়েছে এবং এর জন্য প্যারামিটার অ্যারের প্রয়োজন। আমি মনে করি এটি কেবল কোনও DISTINCT প্রয়োগ না করে "সত্য" নামে একটি সারণী ফিরিয়ে দেবে।
গর্বিতেকদাদ

2
+1 এটি আসলে কাজ করে (কমপক্ষে .NET 4.5 এ)। আপনি যদি বুলিয়ান মানটিকে "সত্য" কেবলমাত্র পরামিতি হিসাবে নির্দিষ্ট করেন তবে এটি ডেটাভিউতে সমস্ত কলামে একটি DISTINCT সম্পাদন করে।
SetFreeByTruth

4

নিম্নলিখিত কাজ। আমার কাছে এটি নেট। এসপি 1 এর সাথে কাজ করছে

// Create the list of columns
String[] szColumns = new String[data.Columns.Count];
for (int index = 0; index < data.Columns.Count; index++)
{
    szColumns[index] = data.Columns[index].ColumnName;
}

// Get the distinct records
data = data.DefaultView.ToTable(true, szColumns);

3

আমি এটি সন্ধান করতে পেরেছি: http://support.microsoft.com/default.aspx?scid=kb ; en-us ; 326176#1

অনুরূপ কিছু সন্ধান করার সময়, কেবলমাত্র। নেট 2.0 এর জন্য

আমি ধরে নিচ্ছি যে ডেটা টেবিল ব্যবহার করার সময় ওপি স্বতন্ত্র সন্ধান করছে। নির্বাচন করুন ()। (নির্বাচন করুন) স্বতন্ত্র সমর্থন করে না)

সুতরাং উপরের লিঙ্ক থেকে কোড এখানে:

class DataTableHelper 
{
    public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
    {   
        DataTable dt = new DataTable(TableName);
        dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);

        object LastValue = null; 
        foreach (DataRow dr in SourceTable.Select("", FieldName))
        {
            if (  LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])) ) 
            {
                LastValue = dr[FieldName]; 
                dt.Rows.Add(new object[]{LastValue});
            }
        }

        return dt;
    }

    private bool ColumnEqual(object A, object B)
    {

        // Compares two values to see if they are equal. Also compares DBNULL.Value.
        // Note: If your DataTable contains object fields, then you must extend this
        // function to handle them in a meaningful way if you intend to group on them.

        if ( A == DBNull.Value && B == DBNull.Value ) //  both are DBNull.Value
            return true; 
        if ( A == DBNull.Value || B == DBNull.Value ) //  only one is DBNull.Value
            return false; 
        return ( A.Equals(B) );  // value type standard comparison
    }
}

2
string[] TobeDistinct = {"Name","City","State"};
DataTable dtDistinct = GetDistinctRecords(DTwithDuplicate, TobeDistinct);

//Following function will return Distinct records for Name, City and State column.
public static DataTable GetDistinctRecords(DataTable dt, string[] Columns)
{
    DataTable dtUniqRecords = new DataTable();
    dtUniqRecords = dt.DefaultView.ToTable(true, Columns);
    return dtUniqRecords;
}

2

বাক্য গঠন:-

DataTable dt = ds.Tables[0].DefaultView.ToTable(true, "ColumnName");

গো EX: -

DataTable uniqueCols = dsUDFlable.Tables[0].DefaultView.ToTable(true, "BorrowerLabelName");

2

সর্বাধিক সাধারণ সমাধানটি হল লিনকিউ ব্যবহার করা এবং তারপরে ফলাফলটি একটি ডেটা টেবেলে রূপান্তর করা

    //data is a DataTable that you want to change
    DataTable result = data.AsEnumerable().Distinct().CopyToDataTable < DataRow > ();

এটি কেবল অ্যাসপেট 4.0 ^ ফ্রেমওয়ার্কের জন্য বৈধ এবং এটি ইভান ফেরার ভিলা নির্দেশিত হিসাবে সিস্টেম.ডাটা.ডাটাসেট এক্সটেনশনগুলির রেফারেন্স প্রয়োজন it


1
সম্ভবত এটির রেফারেন্স দরকারSystem.Data.DataSetExtensions
ইভান ফেরার ভিলা


1
DataTable dt = new DataTable("EMPLOYEE_LIST");

DataColumn eeCode = dt.Columns.Add("EMPLOYEE_CODE", typeof(String));
DataColumn taxYear = dt.Columns.Add("TAX_YEAR", typeof(String));
DataColumn intData = dt.Columns.Add("INT_DATA", typeof(int));
DataColumn textData = dt.Columns.Add("TEXT_DATA", typeof(String));

dt.PrimaryKey = new DataColumn[] { eeCode, taxYear };

এটি আইকোড এবং ট্যাক্সইয়ারের সাথে ডেটা টেবিল ফিল্টার করে একত্রে অনন্য হিসাবে বিবেচিত


0

এটা সহজ

    DataView view = new DataView(dt);
DataTable dt2 = view.ToTable(true, "Column1", "Column2","Column3", ...,"ColumnNth");

এবং dt2 ডেটাতেবলটিতে কলাম 1, কলাম 2..কলামন্থ অনন্য ডেটা রয়েছে।


0
objds.Table1.Select(r => r.ProcessName).AsEnumerable().Distinct();

হাই @ জেলজিউলা, স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম! এখানে আমরা কেবল কোড নয়, ভাল ব্যাখ্যা সহ উত্তরগুলি যত্ন করি। কেবলমাত্র একটি উত্তর পোস্ট করুন যদি এটি সত্যই প্রশ্নের সমাধান করে এবং আপনি কীভাবে তা ব্যাখ্যা করতে পারেন। আপনার ভবিষ্যতের উত্তরগুলি উন্নত করতে, আমি কীভাবে ভাল উত্তর লিখতে পারি তার গাইডটি একবার দেখুন ।
এরিক পেট্রুসেলি

-1

স্টেংগিংয়ের মতো?

অবস্থা নির্বাচন করুন থেকে টেবিল থেকে .... নির্বাচন করুন

http://www.felixgers.de/teaching/sql/sql_distinct.html

নোট: হোমওয়ার্ক প্রশ্ন? এবং blessশ্বর গুগল মঙ্গল করুন ..

http://www.google.com/search?hl=en&rlz=1C1GGLS_enJO330JO333&q=c%23+selecting+distinct+values+from+table&aq=f&oq=&aqi=


3
যাকে আমাকে হ্রাস করেছে: এস, স্পষ্টতই প্রশ্নটি আমার উত্তরের পরে সংশোধিত হয়েছিল ?? (উত্তর 10: 15, প্রশ্নটি 12:15 এ সম্পাদিত) ওহ ভাল .. আপনার অজ্ঞতার জন্য THX :)
ম্যাডি ডি

2
ওপি একটি সি # অ্যাডো নেট নেট পরিবেশে স্বতন্ত্র সারিগুলি কীভাবে নির্বাচন করতে হয় তার জন্য জিজ্ঞাসা করে, আসল ডাটাবেসে নয়।
আক্রমণাত্মক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.