كيف يمكنني الحصول على مجموعة متميزة أمر قائمة أسماء من DataTable باستخدام LINQ?
سؤال
لدي DataTable
مع Name
العمود.أريد إنشاء مجموعة فريدة من نوعها الأسماء مرتبة ترتيبا أبجديا.الاستعلام التالي يتجاهل النظام البند.
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
لماذا orderby
لا تحصل على إنفاذه ؟
المحلول
لجعله أكثر قابلية للقراءة و الصيانة ، يمكنك أيضا تقسيمها إلى عدة LINQ البيانات.
- أولا حدد البيانات الخاصة بك في قائمة جديدة ، دعنا نسميها
x1
, هل الإسقاط إذا رغبت في ذلك - بجانب إنشاء قائمة متميزة ،
x1
فيx2
, باستخدام ما يميز تحتاج - وأخيرا إنشاء قائمة مرتبة ،
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"]);
لا تنتمي إلى StackOverflow