2012-02-13 16 views
0

最近linqからSQLに始まって、私はdbを照会するのに最も効率的な方法が何であるか分かりません。Linq to 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は、テーブルからすべてのレコードを取得すると思いますが、私は唯一のDBから1つのレコードを取得したい、それを行うための方法があります。

注:linqクエリは常に1つのレコードを取得します。「何か」は製品名であるため、すべての製品名に単一のレートがあります。

答えて

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(); 
} 

私もそれを使用して文の内側にデータベースコンテキストを持っていることをお勧めだと思います。データベースへの接続は、必要なだけ開いているようにしてください。 getテーブルは、実際に実行される前にすべてのレコードを取得しません。

リレーショナルデータベースのテーブルは、テーブルコレクション (IQueryableやIEnumerableなどのインターフェイスを実装する)として表されます。 DataContextにはGetTableというメソッドがあります<>();それは 潜在的な視界との対話を表します。 結果に対して反復が実行されるまで、クエリは実際には実行されません( )。 GetTable()の 型パラメータは、データベースのテーブルを識別します。

リファレンスhere

+0

+1 OPの実際の問題に対処するための+1です。間違った前提があります: "私はdb.GetTableがテーブルからすべてのレコードを取得すると思う" – Davy8

+0

@Arionはい、それは私が知りたかったものです...ありがとうございました... –

+0

喜んで助けてください...ハッピーコーディング:) – Arion

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クエリは、常に、一つのレコード「何か」は製品名で取得します。 –

関連する問題