كيفية الحصول على مجموعة من قيم الخصائص المميزة من قوائم الذاكرة؟

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

سؤال

لدي قائمة Foo.

يحتوي Foo على خاصية سلسلة تسمى Bar.

أود أن استخدامها لينك للحصول على سلسلة[] من متميز قيم Foo.Bar في قائمة Foo.

كيف يمكنني أن أفعل هذا؟

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

المحلول

سأذهب لامدا ...أجمل بكثير

var bars = Foos.Select(f => f.Bar).Distinct().ToArray();

يعمل بنفس ما نشره @lassevk.

أود أيضًا أن أضيف أنك قد ترغب في الابتعاد عن التحويل إلى مصفوفة حتى اللحظة الأخيرة.

يقوم LINQ ببعض التحسينات خلف الكواليس، وتبقى الاستعلامات في نموذج الاستعلام الخاص بها حتى تكون هناك حاجة إليها بشكل صريح.لذلك قد ترغب في إنشاء كل ما تحتاجه في الاستعلام أولاً حتى يتم تطبيق أي تحسين محتمل تمامًا.

أعني بالتقييم طلب شيء يتطلب التقييم بشكل صريح مثل "Count()" أو "ToArray()" وما إلى ذلك.

نصائح أخرى

يجب أن يعمل هذا إذا كنت تريد استخدام النمط بطلاقة:

string[] arrayStrings = fooList.Select(a => a.Bar).Distinct().ToArray();

جرب هذا:

var distinctFooBars = (from foo in foos
                       select foo.Bar).Distinct().ToArray();

ألا ينبغي أن تكون قادرًا على فعل شيء مثل:

var strings = (from a in fooList select a.Bar).Distinct();
string[] array = strings.ToArray();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top