最近开始使用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”是产品名称,因此对于每个产品名称,都会有一个单一的费率。
答案 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)
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();