首页 新闻 搜索 专区 学院

net6 mvc 如何进行按条件联合查询?

0
悬赏园豆:80 [已解决问题] 解决于 2022-08-31 00:34

如题!使用的是 Pomelo.EntityFrameworkCore.mysq 6.0。

sql达成的效果如下。

SELECT * FROM poetry,appreciation WHERE
poetry.Id = 37798 AND
appreciation.Pid  = 37798

这是写的

        public IActionResult Poetry(int id)
        {
            //var Poetrys = _dbContext.Poetry.Find(id);

            var Poetrys = from p in _dbContext.Poetry 
                          join a in _dbContext.Appreciation on p.Id equals a.Pid
                          select new 
                          {
                              Id = p.Id,
                              Title = p.Title,
                              ...
                          };

            var Poetry = Poetrys.Where(m => m.Id == id);
            return View(Poetry);
        }

问题出在哪里

悠悠清闲人的主页 悠悠清闲人 | 初学一级 | 园豆:60
提问于:2022-08-30 19:06
< >
分享
最佳答案
0

首先,你这上面的sql就有点奇怪,两个表同时查,但是又不关联。所以,我理解的意思应该是:

SELECT * FROM poetry a inner join appreciation b on a.id=b.pid WHERE a.Id = 37798
另外,你想要和上面一样效果的linq是:
from p in Playlists
join pt in PlaylistTracks on p.PlaylistId equals pt.PlaylistId
where p.PlaylistId == id
select p;
这是我测试过的代码,你把你的字段名替换就ok了。给你一下我的测试截图。

收获园豆:80
ensleep | 小虾三级 |园豆:1666 | 2022-08-30 22:49

这个表是我直接拷贝过来的,简单的看了一下。
应该是关联的,Poetry里的Id 和Appreciation 里的Pid是关联的。

这是Poetry的

这是Appreciation 的

sql 的结果是成功的,你写的和我写的都可以。

最终我改成这样就可以用了,
···
[HttpGet("/Poetry/{id}.html")]
public IActionResult Poetry(int id)
{
//var Poetrys = _dbContext.Poetry.Find(id);

        var Poetry = from p in _dbContext.Poetry 
                      join a in _dbContext.Appreciation on p.Id equals a.Pid
                      where p.Id == id
                      select new
                      {
                          p.Id,
                          p.Title,
                          p.Content,
                          p.Dynasty,
                          p.Note,
                          p.Translate,
                          p.Author,
                          p.Author_id,
                          p.Dynasty_id,
                          a.Pid,
                          a.Fanyi,
                          a.Czbj,
                          a.Jianshang,
                          a.Shangxi,
                          a.Bbsm,
                          a.Pingxi,
                          a.Shangxi2,
                      };
        return View(Poetry);
    }
}

···
我就是不想写下面那个select new{} 里的那一堆。。
有没有改进的方法。

悠悠清闲人 | 园豆:60 (初学一级) | 2022-08-31 00:31

悠悠清闲人 | 园豆:60 (初学一级) | 2022-08-31 00:33

还有个问题。这个查出来的是一条数据,我在mvc 却需要循环才能打出来。
直接打属性会报错。

我是做前端的,net6也不是特别熟。。谢谢了。

悠悠清闲人 | 园豆:60 (初学一级) | 2022-08-31 00:42

OK 全搞定了!

悠悠清闲人 | 园豆:60 (初学一级) | 2022-08-31 06:58

@悠悠清闲人: 上午开会,没看邮件……

ensleep | 园豆:1666 (小虾三级) | 2022-08-31 14:59

@悠悠清闲人: 解决了就好,我看你上面问了好多,有哪些依然需要解答的么?

ensleep | 园豆:1666 (小虾三级) | 2022-08-31 15:00

@ensleep: 没有了,都处理了。
循环是取出来的数据FirstOrDefault 处理了。
另一个数据库为空用left join 解决了。
感谢提供思路。。。

悠悠清闲人 | 园豆:60 (初学一级) | 2022-08-31 19:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册