0

为什么我在以下代码中收到以下错误?

我想如果我将自定义对象放在其类型的通用列表中,那么 IEnumerable 会得到处理吗?我还需要对此 List 做什么才能在其上使用 LINQ?

无法将类型“System.Collections.Generic.IEnumerable <TestLinq23.Customer>”隐式转换为“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; }
    }

}
4

1 回答 1

2

您需要添加一个调用Single()- 否则它会返回一系列客户。

同时,这里没有真正需要使用查询表达式。使用点表示法会更简单:

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

事实上,你可以让它更简单,因为有Single()一个谓词的重载:

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

如果不完全匹配,这是错误情况吗?如果没有,您可能想要使用First()而不是Single().

编辑:正如 Garry 所指出的,如果可能没有您可能想要的结果,SingleOrDefault()或者-如果没有条目匹配FirstOrDefault(),这两者都将返回。null

于 2009-03-06T09:29:00.137 回答