كيفية الحصول على كائن مخصص من قائمة عامة مع LINQ?
-
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
إذا لا توجد إدخالات المباراة.