[英]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.