كيفية الحصول على كائن مخصص من قائمة عامة مع LINQ?

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

  •  03-07-2019
  •  | 
  •  

سؤال

لماذا أحصل على رسالة الخطأ التالية في التعليمات البرمجية التالية?

لقد وضعت الكائنات المخصصة في قائمة عامة من نوع ثم IEnumerable سوف تتخذ الرعاية من ؟ ماذا يجب أن أفعل في هذه القائمة استخدام LINQ على ذلك ؟

لا يمكن تحويل ضمنيا نوع 'System.مجموعات.Generic.IEnumerable<TestLinq23.Customer>' أن 'TestLinq23.العملاء'

using System;
using System.Collections.Generic;
using System.Linq;

namespace TestLinq23
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customerSet = new List<Customer>();
            customerSet.Add(new Customer { ID = 1, FirstName = "Jim", LastName = "Smith" });
            customerSet.Add(new Customer { ID = 2, FirstName = "Joe", LastName = "Douglas" });
            customerSet.Add(new Customer { ID = 3, FirstName = "Jane", LastName = "Anders" });

            Customer customerWithIndex = customerSet[1];
            Console.WriteLine("Customer last name gotten with index: {0}", customerWithIndex.LastName);

            Customer customerWithLinq = from c in customerSet
                           where c.FirstName == "Joe"
                           select c;
            Console.WriteLine(customerWithLinq.LastName);

            Console.ReadLine();
        }
    }

    public class Customer
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

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

المحلول

تحتاج إلى إضافة استدعاء Single() - إلا انها تعود تسلسل من العملاء.

في نفس الوقت, ليس هناك حاجة حقيقية إلى استخدام استعلام التعبير هنا.سيكون من الأسهل استخدام نقطة التدوين:

Customer customerWithLinq = customerSet.Where(c => c.FirstName == "Joe")
                                       .Single();

في الواقع, يمكنك أن تجعل حتى أكثر بساطة, لأن هناك من الحمل الزائد Single() اتخاذ المسند:

Customer customerWithLinq = customerSet.Single(c => c.FirstName == "Joe")

هو حالة خطأ إذا لم يكن هناك واحد بالضبط المباراة ؟ إن لم يكن, قد ترغب في استخدام First() بدلا من Single().

تحرير:كما أشار غاري, إذا قد يكون هناك لا النتائج قد تحتاج SingleOrDefault() أو FirstOrDefault() - كل من هذه العودة null إذا لا توجد إدخالات المباراة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top