这个内连接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查询的结果是具有两个属性的匿名类型对象的序列。其中一种叫做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
在这里使用是正确的。我的意思是,它不会给你的工作带来任何歧义。