繁体   English   中英

Linq to sql高效解决方案

[英]Linq to sql Efficient Solution

最近开始使用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查询将始终获得一条记录“某物”是产品名称,因此对于每个产品名称,将有一个比率。

您也可以这样:

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()的类型参数标识数据库中的表

这里参考

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM