日期:2014-05-20  浏览次数:21125 次

DbContext.Database.SqlQuery<TElement>()如何实现联表查询?
RT。我的数据库是用CodeFirst方式生成的。数据库中有两张表:Player表和PetPlayer表,测试数据如下:

Player表
+----+------------+----------+-----+------------+
| Id | GameUserId | NickName | Sex | profession |
+----+------------+----------+-----+------------+
| 1 | 11 | 尤利娅 | 女 | 南斗圣拳 |
| 2 | 21 | 健次郎 | 男 | 北斗神拳 |
| 3 | 13 | 希恩 | 男 | 南斗圣拳 |
+----+------------+----------+-----+------------+

PetPlayer表
+----+----------+----------+-----------+-------+
| Id | PlayerId | NickName | PetBaseId | Level |
+----+----------+----------+-----------+-------+
| 1 | 1 | 狮子狗 | 1 | 1 |
| 2 | 2 | 东北虎 | 2 | 2 |
| 3 | 3 | 北极熊 | 3 | 3 |
| 4 | 1 | 白天鹅 | 4 | 4 |
+----+----------+----------+-----------+-------+

现在我要执行一条联表查询SQL语句:
string sql = select pp.Id, pp.PlayerId, pp.NickName PetName, p.NickName PlayerName from player p, petPlayer pp where p.Id=pp.PlayerId and p.NickName='尤利娅';
我执行
var rs = myContext.Database.SqlQuery<Object>();
后不知道该怎么处理才能访问原表结构的相对应的字段值?请问我该怎么做?最好详细一点,我初学EF,谢谢!
说明:因为不知道DbContext.Database.SqlQuery<TElement>()的TElement该用什么类型代替,没办法就用了Object。

------解决方案--------------------
C# code
var query=from p in db.Player
          join pp in db.petPlayer
          on p.Id equals pp.PlayerId
          where p.NickName=="尤利娅"
          select new
          { 
              pp.Id, 
              pp.PlayerId,
              PetName=pp.NickName , 
              PlayerName =p.NickName 
          };

返回的是匿名类