在Asp Core razor页面中使用LINQ从两个表中选择数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Asp Core razor页面中使用LINQ从两个表中选择数据相关的知识,希望对你有一定的参考价值。

我有两张桌子:

 public class Department

    public int Id  get; set; 
    public string Name  get; set; 

 

和:

public class UsersAccessDepartments
    
        public int Id  get; set; 
        public string UserId  get; set; 
        public int DepartmentId  get; set; 
    

数据如下:部门

1   Management      
2   Finiance    
5   Reciption   

用户访问回购包括:

1   9c424b6e-fd57-4be7-b47a-2db67b29f651    1
2   9c424b6e-fd57-4be7-b47a-2db67b29f651    2
3   9c424b6e-fd57-4be7-b47a-2db67b29f651    3007
4   9c424b6e-fd57-4be7-b47a-2db67b29f651    3008
5   c4beb529-bb86-439e-a375-4f4cce3f9054    1
6   c4beb529-bb86-439e-a375-4f4cce3f9054    2
7   247779db-ad5f-4128-ae40-7f44cc3c0c71    3007

我喜欢选择具有新文件显示的部门,或者询问的用户是否在部门中:这是SQL及其工作:

Select D.Id, D.Name,
IIF((select UA.Id from UsersAccessDepartments UA where UA.DepartmentId=D.Id and  
UA.UserId='247779db-ad5f-4128-ae40-7f44cc3c0c71') is null ,
'false','true') Selected
from Department D

结果如下:

Id     Name         Selected
1      Management   false
2      Finiance     false
5      Reciption    false
2005    CFO         false
3007    IT          true
3008    Cashier     true

在asp.core剃刀页面中,我只能使用:

db.Department.FromSql(sql)

从一个表接受文件。或者我必须使用:

db.Database.ExecuteSqlCommand(sql);

这不是返回数据。最后一个选项可用于ADO.Net

   command.CommandText = "Your Sql Query";
    context.Database.OpenConnection();
    using (var result = command.ExecuteReader())
    
        // do something with result
    

我不想用这个。我的问题:

我可以使用EF核心在sql上面运行吗?

如何创建相当于我上面的选择查询的Linq语句?

答案

我发现这个linq为我做的工作:

(from c in _db.Department
                                 select new SelectListItem
                                 
                                     Value = c.Id.ToString(),
                                     Text = c.Name,
                                     Selected = (from UA in _db.UsersAccessDepartments
                                                where UA.UserId== TheUser.Id && UA.DepartmentId==c.Id
                                                select UA.Id).Count()==0? false: true
                                 ).ToList();

以上是关于在Asp Core razor页面中使用LINQ从两个表中选择数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core Razor 页面中绑定复杂列表

从 ASP.NET Core Razor 页面获取 DisplayAttribute.Prompt

ASP.NET Core Razor 页面与完整 MVC Core [关闭]

ASP.NET Core 2.2 Razor 页面中的自定义路由

示例 AJAX 回调到 ASP.NET Core Razor 页面

Asp.net Core 3.1-如何从控制器返回到 Razor 页面?