كيف يمكنني الحصول على مجموعة متميزة أمر قائمة أسماء من DataTable باستخدام LINQ?

StackOverflow https://stackoverflow.com/questions/59

  •  08-06-2019
  •  | 
  •  

سؤال

لدي DataTable مع Name العمود.أريد إنشاء مجموعة فريدة من نوعها الأسماء مرتبة ترتيبا أبجديا.الاستعلام التالي يتجاهل النظام البند.

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();

لماذا orderby لا تحصل على إنفاذه ؟

هل كانت مفيدة؟

المحلول

لجعله أكثر قابلية للقراءة و الصيانة ، يمكنك أيضا تقسيمها إلى عدة LINQ البيانات.

  1. أولا حدد البيانات الخاصة بك في قائمة جديدة ، دعنا نسميها x1, هل الإسقاط إذا رغبت في ذلك
  2. بجانب إنشاء قائمة متميزة ، x1 في x2, باستخدام ما يميز تحتاج
  3. وأخيرا إنشاء قائمة مرتبة ، x2 في x3, والفرز حسب ما تريد ،

نصائح أخرى

المشكلة هي أن المتميزة المشغل لا تمنح أنه سوف الحفاظ على النظام الأصلي من القيم.

لذا الاستعلام الخاص بك سوف تحتاج إلى مثل هذا العمل

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);

جرب ما يلي:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);

جرب ما يلي

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);

هذا يجب أن تعمل على ما تحتاجه.

مجردة:كل الإجابات لديهم شيء مشترك.

OrderBy يحتاج إلى أن العملية النهائية.

يمكنك استخدام شيء مثل هذا:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top