ef数据提取错误

apple8160 2017-11-14 10:10:14
两张表
1.会员表user(现大约2000多条数据) 主键:userid
2.会员角色表user_class(会员与角色是1对多) userid 对应user表主键,classid对应user_config主键
3.角色表user_config(角色信息表) 主键classid


var l=db.user.select(n=>new{ .. . .. .. });//简单写了一下
var ucl=db.user_class;
var cl=db.user_config;
//其中会有一些操作
foreach(var i in l){

//操作方法1
i.classname=string.Join(",", (from n in ucl from a in cl where n.userid == i.userid && n.classid== a.classid select a.classname).ToArray());

//操作方法2
ucl=ucl.where(n=>n.userid==i.userid);
i.classname=GetClassName(ucl,cl);
}


public static string GetClassName(IQueryable<Model.user_class> l1, IQueryable<Model.user_config> l2)
{
return string.Join(",", (from n in l1 from a in l2 where n.classid== a.classid select a.classname).ToArray());
}


其中方法1正常,执行大约在500毫秒

方法2出现了问题
提示:当前线程处于堆栈溢出状态,因此无法计算表达式的值

这两种方法区别在什么地方
为什么方法1没问题,而方法2会报错
原理是什么??
...全文
163 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 版主 2017-11-14
  • 打赏
  • 举报
回复
引用 4 楼 apple8160 的回复:
[quote=引用 3 楼 hanjun0612 的回复:] [quote=引用 2 楼 apple8160 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] //操作方法2 ucl=ucl.where(n=>n.userid==i.userid).tolist; i.classname=GetClassName(ucl,cl); } GetClassName(List<Model.user_class> l1, List<Model.user_config> l2) 改成这样呢?
测试过的 (传了两个List进去 ),还是那个错误 。。。 [/quote] 我看出来的区别,只在于 where n.userid == i.userid && n.classid== a.classid 和 where n.classid== a.classid 你在方法二中,添加以下userid,又是什么效果?[/quote] 按照你说的我修改了一下,确实正常了

i.classname=GetClassName(ucl,cl,userid);

public static string GetClassName(IQueryable<Model.user_class> l1, IQueryable<Model.user_config> l2,int userid)
       {
           return string.Join(",", (from n in l1 from a in l2 where n.userid==userid&& n.classid== a.classid select a.classname).ToArray());
       }
但是未修改之前我过滤了一下在传递进去和修改后的未过滤 这两种有什么区别??[/quote] 其实我也没看出太大区别 你使用 from n in l1 join a in l2 on n.classid equals a.classid select a.classname 再试试看呢
apple8160 2017-11-14
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
[quote=引用 2 楼 apple8160 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] //操作方法2 ucl=ucl.where(n=>n.userid==i.userid).tolist; i.classname=GetClassName(ucl,cl); } GetClassName(List<Model.user_class> l1, List<Model.user_config> l2) 改成这样呢?
测试过的 (传了两个List进去 ),还是那个错误 。。。 [/quote] 我看出来的区别,只在于 where n.userid == i.userid && n.classid== a.classid 和 where n.classid== a.classid 你在方法二中,添加以下userid,又是什么效果?[/quote] 按照你说的我修改了一下,确实正常了

i.classname=GetClassName(ucl,cl,userid);

public static string GetClassName(IQueryable<Model.user_class> l1, IQueryable<Model.user_config> l2,int userid)
       {
           return string.Join(",", (from n in l1 from a in l2 where n.userid==userid&& n.classid== a.classid select a.classname).ToArray());
       }
但是未修改之前我过滤了一下在传递进去和修改后的未过滤 这两种有什么区别??
正怒月神 版主 2017-11-14
  • 打赏
  • 举报
回复
引用 2 楼 apple8160 的回复:
[quote=引用 1 楼 hanjun0612 的回复:] //操作方法2 ucl=ucl.where(n=>n.userid==i.userid).tolist; i.classname=GetClassName(ucl,cl); } GetClassName(List<Model.user_class> l1, List<Model.user_config> l2) 改成这样呢?
测试过的 (传了两个List进去 ),还是那个错误 。。。 [/quote] 我看出来的区别,只在于 where n.userid == i.userid && n.classid== a.classid 和 where n.classid== a.classid 你在方法二中,添加以下userid,又是什么效果?
apple8160 2017-11-14
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
//操作方法2 ucl=ucl.where(n=>n.userid==i.userid).tolist; i.classname=GetClassName(ucl,cl); } GetClassName(List<Model.user_class> l1, List<Model.user_config> l2) 改成这样呢?
测试过的 (传了两个List进去 ),还是那个错误 。。。
正怒月神 版主 2017-11-14
  • 打赏
  • 举报
回复
//操作方法2 ucl=ucl.where(n=>n.userid==i.userid).tolist; i.classname=GetClassName(ucl,cl); } GetClassName(List<Model.user_class> l1, List<Model.user_config> l2) 改成这样呢?

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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