LinQ To SQL 多层表大量数据关联的问题

chhrsas 2011-12-02 04:28:47
我现在有三张表:
表DeviceInfo 为主表,数据量 1000左右,
表DeviceParameter 为 DeviceInfo 的从表,数据量3万左右,
表DeviceParameterProperty 为 DeviceParameter 的从表,数据量30万左右。
因为系统初始化时,需要把三张表按当前的关系,一次性查出来,试过直接查,半小时都没出结果。
把数据拿到客户端来,然后手工组合,跑了10分钟还没出结果。

注:EntifyFramwork可以在10秒内完成,但当前的代码都是Linq to SQL,暂不想增加工作量。

本地组合用代码如下:

RefreshLinQDataContext dataContext = new RefreshLinQDataContext();
dataContext.DeferredLoadingEnabled = false;//防止foreach时到数据库做增量检查
var _DeviceInfo = dataContext.DeviceInfo.Where(v => v.Stauts == 2).OrderBy(v => v.InfoID).ToList();
var _DeviceParam = dataContext.DeviceParameter.ToList().GroupBy(v => v.InfoID).AsParallel().OrderBy(v => v.Key);
var _DeviceParamProperty = dataContext.DeviceParameterProperty.ToList().GroupBy(v => v.DeviceParamID).AsParallel().OrderBy(v => v.Key);
//到这里用了2秒左右
foreach (var di in _DeviceInfo)
{
di.DeviceParameter.AddRange(_DeviceParam.Single(v => v.Key == di.InfoID));
var dsfs = _DeviecSafeTime.SingleOrDefault(v => v.Key == di.InfoID);
foreach (var dp in di.DeviceParameter)
{
dp.DeviceParameterProperty.AddRange(_DeviceParamProperty.Single(v => v.Key == dp.DeviceParamID));
}
}

我觉得是在AddRange时不停的开辟内存所致。
还请高手们帮忙解决下,谢谢。
...全文
287 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chhrsas 2011-12-07
  • 打赏
  • 举报
回复
EntifyFramework单表查询后,会自动组合,速度很快,LINQ to SQL不会自动组合,所以才想自己组合的,但是没有找到合适的方法。
chhrsas 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 q107770540 的回复:]

.ToList() GroupBy 这些都是非延迟查询操作符
破坏了LINQ2SQL的延迟查询的特性
[/Quote]
查询数据并没有占用太多的时间,主要是想把数据在内存中按现有关系组合时,占用了大把的时间。
chhrsas 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 claymore1114 的回复:]

AddRange添加一个IEnumerable<T>
Single 是返回一个T

你的 不报错?
di.DeviceParameter.AddRange(_DeviceParam.Single(v => v.Key == di.InfoID));
[/Quote]
不会报错的
阿非 2011-12-03
  • 打赏
  • 举报
回复
断点跟一下
q107770540 2011-12-03
  • 打赏
  • 举报
回复
.ToList() GroupBy 这些都是非延迟查询操作符
破坏了LINQ2SQL的延迟查询的特性
claymore1114 2011-12-02
  • 打赏
  • 举报
回复
AddRange添加一个IEnumerable<T>
Single 是返回一个T

你的 不报错?
di.DeviceParameter.AddRange(_DeviceParam.Single(v => v.Key == di.InfoID));

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧