[英]join in linq with entity framework
我需要幫助以了解linq加入。 我發現了一些與此問題相關的主題,但是我沒有找到對步驟有很好解釋的主題。
我正常查詢,我這樣做。
var q = from c in context.tableA
select c;
List<tableA> tableAList = q.ToList();
在q.ToList()中執行查詢,對吧?
在這里找到了一些例子,但我想對此予以澄清,
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);
}
}
所以從這個例子中我可以看到查詢可以有多個objetc,但是這個“選擇新的”呢? 數據庫中的每個記錄都需要調用它嗎?
那是什么類型的物體? 任何我想要的還是訂單的,因為查詢中的第一個表是?
在對象是第一個表的情況下,如果我需要具有這種類型未定義的數據,那會發生什么,我的意思是新的屬性。
另一個問題,查詢何時執行?
另外,此方法是否對響應速度有利,還是更好的解決方案?
提前。 如果有這個答案的線程,請給我好點。
在q.ToList()中執行查詢,對吧?
是
那“選擇新的”呢? 數據庫中的每個記錄都需要調用它嗎?
new只是一個新的匿名對象,查詢通常會針對您的表運行。
那是什么類型的物體? 任何我想要的還是訂單的,因為查詢中的第一個表是?
它是匿名的,但是如果定義了Order類,則可以select new Order {
。
在對象是第一個表的情況下,如果我需要具有這種類型未定義的數據,那會發生什么,我的意思是新的屬性。
您必須選擇它或將屬性/屬性添加到對象/類。
另一個問題,查詢何時執行?
在foreach循環中
另外,此方法是否對響應速度有利,還是更好的解決方案?
是的很好
Select new
將創建一個匿名類型,您可以將兩個表中的任何字段都放入其中。
您可以在這里閱讀一些內容:
http://msdn.microsoft.com/en-us/library/bb397696.aspx
無論何時使用查詢的結果,都會執行查詢,它既可以在對它進行迭代(foreach)時調用,也可以在調用toList(),toArray()或其上的任何東西時發生。
此方法對於響應速度而言相當不錯。 與生成的任何SQL一樣,它可能可以根據您的用例進行優化,但是除非您有非常大量的數據,否則它就足夠了。 否則,您必須編寫一個存儲過程,並使用Entity Framework對其進行映射
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.