加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Linq to SQL立即执行查询

发布时间:2020-12-16 00:01:59 所属栏目:百科 来源:网络整理
导读:我有 Linq查询,并希望立即执行它,然后操纵数据.现在在下面的代码中,当执行第二(2)Linq查询时,执行第一个(1)Linq查询.我想首先执行first(1)查询,怎么做? // 1var statistic = DataAccess.Instance.Statistics .Where(p = p.DateStamp = fromDate p.DateStamp
我有 Linq查询,并希望立即执行它,然后操纵数据.现在在下面的代码中,当执行第二(2)Linq查询时,执行第一个(1)Linq查询.我想首先执行first(1)查询,怎么做?

// 1
var statistic = DataAccess.Instance.Statistics
                    .Where(p => p.DateStamp >= fromDate && p.DateStamp <= DateTime.UtcNow && p.UserId == userId)
                    .Select(p => new {p.DateStamp.Year,p.DateStamp.Month,p.DateStamp.Day });


values = new int[interval];
labels = new string[interval];

for (var i = 0; i < labels.Length; i++)
{
    // 2
    var recordsCount = statistic.Count(p => p.Year == dayStep.Year && p.Month == dayStep.Month && p.Day == dayStep.Day);
}

解决方法

我认为你在.NET中的数据操作中缺少一个重要的概念

延期和立即获取

需要强调的一点是,默认情况下,LINQ to SQL会从中检索数据
数据库仅在您请求它时,而不是在您定义LINQ to SQL查询或创建时
表集合.这称为延迟提取.

当foreach循环启动时,LINQ to SQL创建并运行派生的SQL SELECT语句
从LINQ to SQL查询创建ADO.NET DataReader对象.每次迭代
foreach循环执行必要的GetXXX方法来获取该行的数据.后
LINAC to SQL关闭了最后一行,并由foreach循环处理
数据库连接.

延迟提取可确保仅检索应用程序实际使用的数据
数据库.但是,如果要访问在远程SQL实例上运行的数据库
服务器逐行获取数据并不能充分利用网络带宽.在这
方案,您可以通过强制立即获取和缓存单个网络请求中的所有数据
评估LINQ to SQL查询.您可以通过调用ToList或ToArray来完成此操作
扩展方法,在定义LINQ to SQL时将数据提取到列表或数组中
查询,像这样:

var productsQuery = from p in products.ToList()
select p;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读