这个内连接LINQ查询的类型是什么?

本文关键字:类型 是什么 查询 LINQ 连接 | 更新日期: 2023-09-27 18:11:05

当程序员使用var而不是精确地写出正确的类型时,我非常恼火。在微软教程:http://msdn.microsoft.com/en-us/library/bb397927.aspx我发现了内连接的这个解释(如下)。innerJoinQuery的类型可能是什么,因为它看起来像两个字符串的混合体,但我们不知道结果类型是什么。

:

连接操作在数据源中未显式建模的序列之间创建关联。例如,您可以执行连接来查找具有相同位置的所有客户和分销商。在LINQ中,join子句总是针对对象集合而不是直接针对数据库表。

C#
var innerJoinQuery =
    from cust in customers
    join dist in distributors on cust.City equals dist.City
    select new { CustomerName = cust.Name, DistributorName = dist.Name };
在LINQ中,你不需要像在SQL中那样经常使用join,因为LINQ中的外键在对象模型中被表示为包含一组项的属性。例如,一个Customer对象包含一个Order对象的集合。不是执行连接,而是使用点表示法访问顺序:

编辑:让我们重新表述这个问题。我还可以用什么代替var呢?

这个内连接LINQ查询的类型是什么?

这个linq查询的结果是具有两个属性的匿名类型对象的序列。其中一种叫做CustomerName,另一种叫做DistributorName。它们都很可能是string型。

为了避免var,您必须声明具有以下两个属性的类,如下所示:

class ClassName
{
    public string CustomerName { get; set; }
    public string DistributorName { get; set; }
}

那么你必须把你的linq查询改成下面的:

IEnumerable<ClassName> innerJoinQuery =  from cust in customers
                                         join dist in distributors 
                                         on cust.City equals dist.City
                                         select new ClassName 
                                         { 
                                             CustomerName = cust.Name, 
                                             DistributorName = dist.Name 
                                         };

然而,如果你只是想获得这个查询的结果并迭代它们或其他东西,我不认为上面的方法有任何好处。换句话说,我认为var在这里使用是正确的。我的意思是,它不会给你的工作带来任何歧义。