Wie ein benutzerdefiniertes Objekt aus einer generischen Liste mit LINQ zu bekommen?

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

  •  03-07-2019
  •  | 
  •  

Frage

Warum erhalte ich folgende Fehlermeldung in dem folgenden Code?

Ich dachte, wenn ich benutzerdefinierte Objekte in einer generischen Liste seiner Art setzte dann würde IEnumerable betreut werden? Was brauche ich, um auf diese Liste zu tun LINQ zu verwenden, um auf das?

  

Kann nicht implizit Typ umwandeln   'System.Collections.Generic.IEnumerable<TestLinq23.Customer>'   zu 'TestLinq23.Customer'

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; }
    }

}
War es hilfreich?

Lösung

Sie müssen einen Aufruf in den Single() -. sonst ist es eine Rückkehr sequence von Kunden

Zur gleichen Zeit gibt es keine wirkliche Notwendigkeit hier einen Abfrage-Ausdruck zu verwenden. Es wird einfacher sein Punktnotation zu verwenden:

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

In der Tat, können Sie es sogar noch einfacher, weil es eine Überlastung von Single() ein Prädikat zu nehmen:

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

Ist es ein Fehler, wenn es nicht gerade ein Spiel ist? Wenn nicht, sollten Sie First() statt Single().

EDIT: Wie von Garry wies darauf hin, wenn es sein kann, nicht führt Sie vielleicht SingleOrDefault() oder FirstOrDefault() -. beides wird wieder null wenn keine Einträge übereinstimmen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top