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

时间:2014-07-02 14:34:25

标签: c# sql linq join

当程序员使用var而不是精确并编写正确的类型时,我非常恼火。在Microsoft教程中:http://msdn.microsoft.com/en-us/library/bb397927.aspx 我已经找到了内连接的解释(下面)。可能是innerJoinQuery的类型,因为它看起来像混合2个字符串,但我们不知道结果类型是什么。

引用:

连接操作会在未在数据源中显式建模的序列之间创建关联。例如,您可以执行联接以查找具有相同位置的所有客户和分销商。在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

1 个答案:

答案 0 :(得分:4)

此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在这里使用正确。我的意思是它并没有对你所做的事情产生任何含糊之处。