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