我需要帮助才能理解linq join。我发现了一些与此问题相关的主题,但我没有找到一个对步骤有很好解释的主题。
我正常查询,我这样做。
var q = from c in context.tableA
select c;
List<tableA> tableAList = q.ToList();
在q.ToList()中,它执行了查询,对吗?
here找到了一些例子,但我想清楚这一点,
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;
ObjectSet<SalesOrderDetail> details = context.SalesOrderDetails;
var query =
from order in orders
join detail in details
on order.SalesOrderID equals detail.SalesOrderID
where order.OnlineOrderFlag == true
&& order.OrderDate.Month == 8
select new
{
SalesOrderID = order.SalesOrderID,
SalesOrderDetailID = detail.SalesOrderDetailID,
OrderDate = order.OrderDate,
ProductID = detail.ProductID
};
foreach (var order in query)
{
Console.WriteLine("{0}\t{1}\t{2:d}\t{3}",
order.SalesOrderID,
order.SalesOrderDetailID,
order.OrderDate,
order.ProductID);
}
}
所以从这个例子我可以看到查询可以有超过1个objetc但是这个&#34;选择新的&#34; ?它是否为数据库中的每条记录调用?
那个对象是什么类型的?我想要或订购的任何人,因为它是查询中的第一个表?
如果对象是第一个表,如果我需要有这种类型中没有定义的数据会发生什么,我的意思是新的attr。
其他问题,查询何时执行?
此外,这种方法对响应速度有好处还是更好的解决方案?
提前thx。如果有一个帖子有这个答案,那么请指点我。答案 0 :(得分:2)
在q.ToList()中,它执行查询,对吗?
是
这个“选择新”怎么样?它是否为数据库中的每条记录调用 ?
new只是一个新的匿名对象,通常会针对您的表运行查询。
那个对象是什么类型的?任何我想要的或订单,因为是 查询中的第一个表?
它是匿名的,但如果您定义了Order类,则可以select new Order {
。
如果对象是第一个表,如果需要,会发生什么 有这种类型的数据,我的意思是新的attr。
您必须选择它或将属性/属性添加到您的对象/类。
其他问题,查询何时执行?
在foreach循环中
此外,这种方法对响应速度有好处还是更好的解决方案?
是的,没关系
答案 1 :(得分:1)
Select new
正在创建一个匿名类型,您可以将两个表中您想要的任何字段放入其中
你可以在这里阅读一下:
http://msdn.microsoft.com/en-us/library/bb397696.aspx
只要你使用它的结果就会执行查询,它可以在你对它进行迭代(foreach)时,或者在你调用toList(),toArray()或其他任何东西时发生。
此方法对响应速度非常有用。 与任何生成的SQL一样,它可能会根据您的使用情况进行优化,但除非您拥有非常大量的数据,否则它就足够了。 否则,您必须编写存储过程,并将其映射到实体框架