Выберите данные из таблицы буксировки с помощью LINQ на страницах бритвы Asp Core - PullRequest
0 голосов
/ 13 марта 2019

У меня есть две таблицы:

 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   

UsersAccessDepartments:

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
    }

, и я не хочу использовать этот.Мой вопрос:

Могу ли я запустить выше sql с использованием ядра EF?

как создать оператор Linq, эквивалентный моему вышеупомянутому запросу select?

1 Ответ

1 голос
/ 13 марта 2019

Я нашел, что этот 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...