2012-02-13 85 views
0

最近開始與LINQ到SQL,我不知道什麼是最有效的方式來查詢數據庫,只得到我需要的。LINQ到SQL高效的解決方案

DataContext db = new 
DataContext(ConfigurationManager.AppSettings["myConnection"]); 

Table<RatesClass> CurrencyRatestbl = db.GetTable<RatesClass>(); 
double Rate = 0.00; 
    Rate = 
     (from c in CurrencyRatestbl 
     where c.From == "something" 
     select Convert.ToDouble(c.Rate)).Single(); 

我認爲db.GetTable得到從表中的所有記錄,但我想只能從數據庫一條記錄,是有辦法做到這一點。

注意: linq查詢總是會得到一個記錄「something」是產品名稱,所以對於每個產品名稱都會有一個單一的速率。

回答

3

你也可以做這樣的:

using(DataContext db = new DataContext(ConfigurationManager.AppSettings["myConnection"])) 
{ 
    var rate=db.GetTable<RatesClass>() 
      .Where(a=>a.From == "something") 
      .Select(a=>Convert.ToDouble(a.Rate)) 
      .SingleOrDefault(); 
} 

我也認爲這是有一個using語句內的數據庫環境的最佳實踐。這樣,只要需要,數據庫的連接就會打開。在實際執行之前,get表不會獲取所有記錄。

關係數據庫中的表格被表示爲表集合 (其實現IQueryable和IEnumerable之類的接口)。 DataContext有一個名爲GetTable的方法<>();它代表了一個 與視圖的潛在交互。 實際執行的查詢不是 ,直到執行結果的迭代。 GetTable()的 類型參數標識數據庫中的表。

參考here

+0

+1解決OP的實際問題,這是不正確的假設:「我認爲db.GetTable獲取表中的所有記錄」 – Davy8 2012-02-13 12:51:52

+0

@Arion是這就是我想知道的......謝謝...豎起大拇指 – 2012-02-13 13:06:46

+0

很高興幫助...快樂編碼:) – Arion 2012-02-13 13:09:41

0

Single()將拋出一個異常如果您的ResultSet包含0或多個元素... First()FirstOrDefault()似乎更適合您的情況。

DataContext db = new DataContext(ConfigurationManager.AppSettings["myConnection"]); 
Table<RatesClass> CurrencyRatestbl = db.GetTable<RatesClass>(); 

double Rate = 0.00; 

Rate = (from c in CurrencyRatestbl 
     where c.From == "something" 
     select Convert.ToDouble(c.Rate)).FirstOrDefault(); 
+0

LINQ查詢總是會得到一個記錄「東西」是產品的名字,所以每一個產品的名稱將有一個單一稅率。 – 2012-02-13 12:46:38