Linq to sql Efficient Solution

时间:2012-02-13 12:38:03

标签: c# linq-to-sql c#-4.0

最近开始使用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获取一条记录,有没有办法做到这一点。

注意: linq查询将始终获得一条记录“something”是产品名称,因此对于每个产品名称,都会有一个单一的费率。

2 个答案:

答案 0 :(得分: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语句中。这样只要需要,就可以打开与数据库的连接。获取表在实际执行之前不会获得所有记录。

  

关系数据库中的表表示为表集合   (它实现了诸如IQueryable和IEnumerable之类的接口)。   DataContext有一个名为GetTable&lt;&gt;()的方法;它代表了一个   与表格的潜在互动。 查询不是   实际执行,直到执行迭代结果。该   GetTable()的type参数标识数据库中的表

参考here

答案 1 :(得分:0)

如果您的ResultSet包含0个或多个元素,则

Single()将抛出异常... 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();