2017-10-04 269 views
4

我是實體框架的新手。我有點困惑與EF查詢和LINQ查詢的區別。我有兩個表格和下面列出的相關查詢。你能告訴我所有這些查詢是否都是LINQ,或者它們中的任何一個都在EF中?我需要編寫EF查詢來選擇整行,少數列和連接。您的幫助或任何相關的鏈接將不勝感激。區分EF查詢和LINQ查詢

Product_Details表 PRODUCT_ID,PRODUCT_NAME,價錢,ITEM_DESC,Stock_Avaialble,CREATED_DATE

Sales_Details表 Sales_ID,PRODUCT_ID,Qunatity,Total_Amont

var result = context.ProductDetails 
       where ProductID == 10 
       select new {ProductID, ProductName, Price} 

var result = from prod in context.ProductDetails 
        where ProductID == 10 
        select new {ProductID, ProductName, Price} 

var result = context.ProductDetails 
        .Where(p=>p.ProductID == 10) 
        .Select(p=> new Prod(p.ProductID, p.ProductName, p.Price)) 

var result1 = from prod in context.ProductDetails 
        join sales in context.SalesDetails on prod.ProductID == sales.ProductID 
        select new {prod.ProductID, prod.ProductName, sales.Qunatity, sales.TotalAmount} 

感謝 彼得

+2

EF不是一種語言。 EF是一種支持* LINQ的技術。 –

回答

1

大腸桿菌查詢沒有這樣的事情。在使用E.F.時使用的查詢是LINQ。然而,LINQ做了更多。

E.F. documentation來自:

實體框架是一個對象關係映射器(O/RM),使.NET開發使用.NET對象的數據庫的工作。它消除了開發人員通常需要編寫的大部分數據訪問代碼的需求。

實體框架是一個在C#中使用的庫。

this一篇關於LINQ MSDN上:

我們使用術語語言集成查詢(LINQ),以表明查詢是開發商的主要編程語言的集成功能。

LINQ is part of C#。

添加到.NET Framework中的通用查詢工具適用於所有信息源,而不僅僅是關係數據或XML數據。這個工具被稱爲.NET語言集成查詢(LINQ)。

這裏的關鍵是那句「適用於信息所有來源」。所有的E.F.所做的都是抽象出數據庫,並允許你使用它們,就好像它們是程序中的普通枚舉數一樣。

標準查詢運算符允許將查詢應用於任何基於IEnumerable的信息源。

對LINQ提供的可枚舉項使用LINQ查詢和擴展方法來處理E.F.爲您提供的「枚舉」(DB抽象)。

1

LINQ是一種在你選擇的語言(VB,C#,.NET)中查詢。它與EF沒有直接關係。 EF是映射到數據庫的東西,您使用LINQ作爲查詢數據庫的一種方式。這只是您使用與EF配對獲取數據的語法。你也可以在集合等東西上使用LINQ。

+0

https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b是一些示例LINQ語句。 –

0

據我瞭解你的問題,你所有的代碼返回與linq相關的查詢。他們定義了要在數據庫中完成的操作,但還沒有到db去,因爲他們沒有定義執行命令(find,singleordefault,first,tolist等)。 Linq用於構建和執行查詢,例如EF語言的附加功能,也可以這樣做,但用途有限。對於數據庫,linq構建查詢並通過EF(或另一個ORM)訪問數據庫。

像AsNoTracking(),Include(),ThenInclude()等一些語法是EF語法專有的(意思是你必須指定該庫)。使用linq語法意味着你必須參考linq(儘管大多數模板默認包含它)。