首页 新闻 会员 周边

新手求问:Linq三张表联合查询,为什么查询的结果没有第三张表的字段?

0
悬赏园豆:50 [已解决问题] 解决于 2015-04-04 13:03

贴查询语句 和 查询结果图
List<T_attend> user = (from a in model.T_attend
                                   join b in model.T_userinfo
                                   on a.UserId equals b.Id
                                   join c in model.T_worked
                                   on a.UserId equals c.UserId
                                   select a
                                  ).ToList();

结果:

最美的不是下雨天的主页 最美的不是下雨天 | 初学一级 | 园豆:4
提问于:2015-04-02 17:46
< >
分享
最佳答案
0

你就Select a,只有T_Attend的字段。

至于为啥有T_userinfo的连接,是因为你数据库设计了关系。

而没有T_worked,那是因为数据库没有关系。

收获园豆:30
爱编程的大叔 | 高人七级 |园豆:30839 | 2015-04-02 17:50

我数据库设计的时候都没有设外键,在建立实体数据模型的时候添加的主外键联系,这样不可以吗?我就是想联结三张表,读取三张表中的数据,然后在前台显示出来,刚接触mvc,linq,有些地方不是很明白.

最美的不是下雨天 | 园豆:4 (初学一级) | 2015-04-02 18:04

我把T_worked 和 T_userinfo 两张表联结就能查到数据

最美的不是下雨天 | 园豆:4 (初学一级) | 2015-04-02 18:14

@最美的不是下雨天: 

1、如果不管这样设计好不好,只是要达到你的目标,你只要在数据库添加T_Attend和T_Work的关系就可以。

2、这样的设计是不合理的,通常。除非你确定不会造成大量的数据下载。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-02 20:04

@爱编程的大叔:我这表T_userinfo 和 T_attend 有主外键联系,T_userinfo 和 T_worked有主外键联系,

为什么那样联结不对呢?你看我下面的图片,查到想要的数据了,传给前台的时候提示(图片),我在前台该怎么输出呢?

最美的不是下雨天 | 园豆:4 (初学一级) | 2015-04-02 20:27

@最美的不是下雨天: 当你使用了Select New的时候,

MODEL已经变成一个匿名类型了,你是无法再使用 Model.Property这样的访问方式了。

如果想要这样访问,则需要再自己定义一个新的MODEL

然后使用Select New Model 这样的方式来将数据库结果放入这样MODEL类型中。

你现在这个阶段就是多看书,多练习,有些感觉你还没有找到。

多看多练就行了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-03 10:52

@爱编程的大叔: 恩,好的,自己看资料有一点点明白,还是多看看吧,刚接触模模糊糊的感觉,谢谢你

最美的不是下雨天 | 园豆:4 (初学一级) | 2015-04-03 23:42
其他回答(2)
0

你返回的是一组匿名对象,所以才报这个错

 

select new xxx{

  a.Attend,

  .....

}

 

你定义一个 xxx ViewModel, 进行传递就不会报这个错了

收获园豆:10
Yu | 园豆:12980 (专家六级) | 2015-04-03 09:10

恩,已经解决了 还是谢谢你

0

既然你的select是a,为什么要有a之外的内容?b和c只是起到限制a的结果的条件控制而已。

收获园豆:10
519740105 | 园豆:5810 (大侠五级) | 2015-04-03 09:20

我不是想要a之外的内容啊,我就是想把三张表连起来,然后在前台读出来,两张表是可以的,三张表不行,暂时换了一种方式实现,刚接触,里面的原理不是很懂,还需要多学习。

清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册