【发布时间】:2015-09-18 10:54:07
【问题描述】:
我正在编写查询以使用 linq 从数据库中查找整数值的总和。在开发过程中,我有两个想法。我可以通过包含或内部连接来做到这一点。以下是查询
var Customer = db.tbl_User_to_CustomerMast.Where(i => i.fk_Store_ID == s.ShopID).ToList();
查询1:
var RewardCount = db.tbl_RewardAwardMast.Where(i => Customer.Select(j => j.User_Customer_ID).ToList().Contains(i.fk_Customer_UserID.Value)).Sum(i => i.RewardPoints).GetValueOrDefault(0);
查询 2:
var RewardCount = Customer.Join(db.tbl_RewardAwardMast, i => i.User_Customer_ID, j => j.fk_Customer_UserID, (i, j) => new { Customer = i, Reward = j }).Sum(i=>i.Reward.RewardPoints).GetValueOrDefault(0);
我知道在这两个查询中,计算都将在服务器端完成以匹配记录。
那么哪个查询适合更快的执行呢?
【问题讨论】:
-
你为什么不分析你的代码来找出答案?将这两个查询重复 100 万次,并测量每种情况下的总执行时间。
-
你的意思是我应该把这两个查询都放在 for 循环中以进行大量重复?它会给我正确的结果吗?我以前从未尝试过
-
我建议你也看一下生成的 SQL——它可能完全一样。这与在 LINQ to Objects 中做同样的事情会有很大的不同。
-
是的,使用一个简单的for循环并使用the Stopwatch class来测量执行时间。