簡體   English   中英

通過實體框架加入linq

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM