2011-11-03 63 views
11

嘗試LINQ的使用LinqPad與如何開始它得到frustated學習非常基本的LINQ運行SQL查詢。比方說,我想編寫一個C#Expression和一個C#語句,在SQL Server中有一個名爲Products的表格,並且我想拉取價格大於50的所有行。你會怎樣寫它?步驟初學者使用Linqpad

回答

16

比方說,我想寫一個C#表達和C#statment,我 有一個名爲Products的SQL服務器中的表,我想拉動所有的行 ,其中價格大於50.如何將它寫入?

LINQPad爲你自動構建類型化的DataContext,所以你不需要實例化任何東西。在C#表達式模式下,只需鍵入以下內容:

Products.Where(p => p.Price > 50) 

並按F5。或者,你可能更願意使用一個查詢表達式:

from p in Products 
where p.Price > 50 
select p 

在C#中的語句模式,你需要調用dump()方法來告訴它寫出來的結果。您還需要用分號來終止表達式:

Products.Where(p => p.Price > 50).Dump(); 

有在LINQPad的樣品部分更多的例子 - 看5分鐘的誘導。

+0

謝謝@Joe。這正是我所期待的。順便說一句exprssion工作得很好,但是當我運行「從產品中p在p.Price> 50選擇p」的說法我得到錯誤「;預計」。我加 ;最後,但這也沒有幫助。有任何想法嗎? –

+0

這是因爲您已選擇了C#語句。聲明必須以;但表情不能以;我只是跳過所有這些困惑,並與C#程序:) – Joe

+0

@Joe你能幫我這個問題:) http://stackoverflow.com/questions/19291255/linqpad-doesnt-render-group-collection – AuthorProxy

3
var db = new MyDatabaseContext(); // Your database context. 
var result = db.Products.Where(q=>q.Price > 50); 

...其中db代表您的ORM上下文。 Price表示您映射到數據庫中的Price字段。 result代表結果集 - 您的數據庫行/實體。

+0

它給出「無法找到類型或命名空間名'MyDatabaseContext'」。對不起我的無知,但我對Linq/ORM完全陌生。我需要在Linqpad中設置一些東西嗎?我的印象是,我可以像使用SQL管理工作室一樣直接使用linq to sql,並直接查詢數據庫表 –

+0

您需要創建數據庫映射。 'MyDatabaseContext'只是你稱爲ORM的虛擬名稱。 –

+0

你知道我在哪裏可以在LinqPad中創建映射嗎? –

0

退房:http://msdn.microsoft.com/en-us/library/bb397933(v=vs.90).aspx,這將給你介紹LINQ和使用lambda表達式。

然後看看http://msdn.microsoft.com/en-us/library/bb386927.aspx,這將給你的基礎知識,但回答您的具體問題:

var products = db.Products.Where(prod => prod.Price > 50); 
foreach(var product in products) 
{ 
    //do something 
} 
+0

當我作爲一個C#程序運行它,我得到以下錯誤「'LINQPad.User.Products'不包含'Price'的定義,並且沒有可接受'LINQPad.User.Products'類型的第一個參數的擴展方法'Price'」。我究竟做錯了什麼? –

+0

您需要創建數據庫映射。你看看我發佈的Linq 2 SQL教程鏈接了嗎?這涵蓋了基礎知識。你有一個產品表的數據庫? – Maess

+0

是的,我看到了,但在LinqPad中,我似乎找到的唯一選擇是添加連接。一旦我添加連接到我的SQL Server數據庫實例,我可以看到左側的所有數據庫/表等。我只是不知道或看到任何optons如何以及在哪裏創建數據庫映射 –

5

只想添加 - LINQ墊的複數形式 - 我不知道這一點,它讓我抓狂了好15分鐘

我試圖從一個叫做DentalApplication

DentalApplication.Where(a=> a.PackageID > 0) 

給了表中選擇我這個錯誤

'LINQPad.User.DentalApplication' does not contain a definition for 'Where' 

改成了

DentalApplications.Where(a=> a.PackageID > 0) 

它的工作

+0

默認情況下,Linqpad複數的子關聯屬性。請參閱http://stackoverflow.com/questions/7833133/linqpad-adds-an-s-to-the-end-of-every-table – maoyang