LINQ多表查询的问题

qq_40193140 2018-09-18 03:01:13
.net core2.1 razor环境,
下面第二个方法如何改才能通过?

//这样通过
public IList<Model_Book> Book { get;set; }
public async Task OnGetAsync()
{
var books = from m in _context.Book
select m;
Book = await books.ToListAsync();
}

//多表联查不通过,应该如何写
public IList<Model_Book> Book { get;set; }
public async Task OnGetAsync()
{
var books = from m in _context.Book
join n in _context.MD_Category on m.Category equals n.ID
select new{
m.ID,
m.Name,
m.ReleaseDate,
m.Author,
m.Price,
m.Publishing,
CategoryName = n.C_Name
};
Book = await books.ToListAsync();//错误
}
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_40193140 2018-09-19
  • 打赏
  • 举报
回复
谢谢版主给出的思路,我解决了这个问题,现将解决方法简单贴出来:
在ViewModels层新建一个BookViewModel类,代码如下
    
public class BookViewModel
{

[Display(Name = "书籍名称")]
public string BookName { get; set; }
[Display(Name = "分类")]
public string CategoryName { get; set; }
}


我用的是.net core2.1 razor,所以我在CS文档写以下:
引用using test.Models.ViewModels;


public class indexModel : PageModel
{
private readonly test.Models.myConn _context;

public indexModel(test.Models.myConn context)
{
_context = context;
}
public List<BookViewModel> GetBookList() {
var books = (from m in _context.Book
join n in _context.MD_Category on m.Category equals n.ID
select new BookViewModel
{
BookName = m.Name,
CategoryName = n.C_Name
}).ToList();
return books;
}
public void OnGet()
{
GetBookList();
}

在razor视图页这样引用:

<table class="table table-hover">
<tr>
<th>
图书名称
</th>
<th>
分类
</th>
</tr>

@foreach (var item in Model.GetBookList())
{

<tr>
<td>
@Html.DisplayFor(modelItem => item.BookName)

</td>
<td align="right">

@Html.DisplayFor(modelItem => item.CategoryName)
</td>

</tr>
}
</table>
z467057213c 2018-09-18
  • 打赏
  • 举报
回复
二楼说的对。
看你代码,应该是想筛选_context.Book中CategoryName = n.C_Name的对象,将你的select new{
m.ID,
m.Name,
m.ReleaseDate,
m.Author,
m.Price,
m.Publishing,
CategoryName = n.C_Name,
写法改为select new Model_Book(){
ID=m.ID,
Name=m.Name,
ReleaseDate= m.ReleaseDate,
Author=m.Author,
Price=m.Price,
Publishing= m.Publishing,
CategoryName = n.C_Name}
即可。
exception92 2018-09-18
  • 打赏
  • 举报
回复
from m in _context.Book select m;
-》select m 表示的就是Book类型

select new{.................}
-》表示为复杂匿名类型,它不能直接的转换为Book类的,因为它包含 n.C_Name 字段,它在Book类中不存在吧。
自定义个复杂类型 包含new出来的各种属性,返回接收即可。

8,497

社区成员

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

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