c# - LINQ C# 查询的逻辑是什么?

标签 c# linq

<分区>

从“Essential LINQ”一书中检查以下程序:

class Customer
    {
     public string CustomerID {get;set;}
     public string ContactName {get;set;}
     public string City {get;set;}
     public static List<Customer> GetCustomers()
     {
        return new List<Customer>
        {
            new Customer {CustomerID = "ALFKI", ContactName = "Maria Anders", City = "Berlin"},
            new Customer {CustomerID = "ANATR", ContactName = "Sns Trujillo", City = "Mexico D.F."},
            new Customer {CustomerID = "ANTON", ContactName = "Antonio Moreno", City = "Mexico D.F."}
        };
     }
    }
void Main()
{
    var query = from c in Customer.GetCustomers()
                where c.City == "Mexico D.F."
                select new { c.City,  c.ContactName};
    foreach (var cityandcontact in query)
    {
        Console.WriteLine(cityandcontact);
    }
}

在 LINQ 查询中,如果我从行中删除“new”,为什么会出现错误:
选择新的{c.City, c.ContactName};

为什么我们不能这样写

select c.City, c.ContactName;

这里的逻辑是什么?

最佳答案

查询返回同一类对象的枚举。它可以是任何类,但它必须是所有行的一个类。如果不将成对的对象(城市和联系人姓名)组合成单个对象,则无法返回它们。在这种情况下,您将它们组合成一个具有两个属性的匿名类型的对象。

附带说明一下,使用Select 方法没有任何优势,因为这两个属性都来自同一个Customer 类。事实上,这比返回未更改的客户对象效率更低,如下所示:

var query = from c in Customer.GetCustomers()
            where c.City == "Mexico D.F.";
foreach (var c in query)
{
    Console.WriteLine("{0} {1}", c.City, c.ContactName);
}

关于c# - LINQ C# 查询的逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11388516/

相关文章:

c# - 限制数据查询,只获取最后 1000 行

c# - 无法转换为我的自定义 ConfigurationSection

c# - 我应该锁定 'event' 吗?

c# - 如何在第一个cake文件编译成功的基础上一个一个运行两个cake文件?

c# - Linq to SQL 是用户日期范围与数据库日期范围相交

c# - Linq 查询以包含连接对象上的项目

c# 如何快速通过 ~300mb 日志文件进行 grep

c# - 在 C# 中的列表中使用数组

c# - Linq选择项目,它等于另一个表中的ID

c# - 需要包含()相关实体但没有选择这样做