2012-01-02 73 views
0

我需要幫助來理解linq連接。我發現了與這個問題有關的幾個主題,但我沒有找到一個有很好解釋的步驟。以實體框架加入linq

我正常的查詢,我這樣做。

var q = from c in context.tableA 
     select c; 
     List<tableA> tableAList = q.ToList(); 

in 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但對於這個「選擇新的」?它是否被稱爲數據庫中的每個記錄?

什麼類型是對象?我想要的任何人或是訂單,因爲是查詢中的第一個表?

在對象的情況下,是第一臺,如果我需要有一個未在這種類型的,我的意思是新ATTR定義的數據會發生什麼。

其他問題,當查詢執行?

而且,這種方法很好的響應速度或更好的解決方案?

thx提前。如果有一個線程與這個答案plz指向我很好。

回答

2

in q.ToList() its get executed the query, right?

what about this "select new" ? is it called for each record in the DB ?

新只是一個新的匿名對象,查詢通常跑了反對你的表。

what type is that object? anyone i want or is order because is the first table in the query?

是匿名的,你可以做select new Order {不過,如果你已經定義了一個Order類。

in case of the object is the first table, what happens if i need to have data that is not defined in this type of, i mean new attr.

你將不得不選擇它或屬性/屬性添加到您的對象/類。

other question, when is the query executed?

在foreach循環

also, is this method good for response speed or are better solutions?

是的,這很好

+0

你告訴我的是正確的。現在我得到了一個例子的錯誤。與ON表明它說,順序和細節是不正確的與平等,但與他們的工作表明他們的工作是正確的。任何線索? – 2012-01-03 15:22:35

+0

錯誤:名稱「訂單」不在「等於」左側的區域內。改變'equals'兩邊的表達式。 – 2012-01-03 15:34:05

+0

如果有人在意,事情就是這個順序在這裏。我是在平等的左邊放置細節,並且必須繼續下去。 – 2012-01-03 16:32:00

1

Select new正在創建一個匿名類型,你可以把你從兩個表到它希望的任何領域。
你可以做一些閱讀在這裏:
http://msdn.microsoft.com/en-us/library/bb397696.aspx

當你使用它的結果時,執行查詢時,它可以當你迭代(的foreach)發生在其上,或當你調用toList(),指定者()或其他任何東西。

該方法可用於響應速度相當好的。 與任何生成的SQL一樣,它可能會根據您的用例進行優化,但除非您擁有非常大量的數據,否則就足夠了。 否則,你必須編寫一個存儲過程,並將其與實體框架進行映射