Arhn - архитектура программирования

Что такое выражение Linq Query для получения всего идентификатора отдела, имени в переменной списка выбора для раскрывающегося списка

Я пытаюсь создать раскрывающийся список, чтобы перечислить имя отдела, имеющее право видеть пользователя, вошедшего в систему. Я передаю идентификатор пользователя, DepotIds. Отдел должен быть указан против пользователя и хранилища. Мой запрос Linq не работает, пожалуйста, помогите, у меня есть следующая модель

 public class Depot
{
    public  int Id { get; set; }
    public string  DepotName { get; set; }

}
 public class Department
{
    public int Id { get; set; }
    public string  DepartmentName { get; set; }

}
     
 public class User
{
    public  int Id { get; set; }
    public string  UserName { get; set; }

}
public class USerDepotDepartmentLink
{
    public int UserId { get; set; }
    public int DepotId { get; set; }
    public int DepartmentId { get; set; }
    public IsDefault { get; set; }
}

Из приведенной выше модели у меня есть следующие записи

Depot Record
Id = 1; DepotName = Depot1
Id = 2 ; DepotName = Depot2

Department Record
Id = 1; DepartmentName = Sales
Id = 2 ; DepartmentName = Account
Id = 3 ; DepartmentName = Marketing

User Record
Id = 1; Username = User1
Id = 2; Username = User2 

USerDepotDepartmentLink
UserId = 1, DepotId=1, DepartmentId =1 , IsDefault = 1 
UserId = 1, DepotId=1, DepartmentId =2 , IsDefault = 0

UserId = 2, DepotId=1, DepartmentId =2 , IsDefault = 0
UserId = 2, DepotId=1, DepartmentId =3 , IsDefault = 0
UserId = 2, DepotId=2, DepartmentId =1 , IsDefault = 0
UserId = 2, DepotId=2, DepartmentId =2 , IsDefault = 1
UserId = 2, DepotId=2, DepartmentId =3 , IsDefault = 0

из приведенного выше примера для UserId 1. В раскрывающемся списке отдела должно быть «Продажи, счета» и выбран «Отдел продаж».

Для userId 2 раскрывающийся список «Отдел» должен быть «Продажи, учетные записи, маркетинг», а выбранный отдел — «Учетная запись».

Я создал запрос Linq, приведенный ниже, но не работающий

 public IEnumerable<SelectListItem> GetLocationsByDepotForDropdown(int userId, int[] depotNo)
    {
        
        List<SelectListItem> locations = (from dpt in goContext.goDepartment
                                          join dep in goContext.goUserDepartment 
                                          on dpt.DepartmentID equals dep.DepartmentID
                                         where dep.UserID == userId
                                         && dpt.IsDeleted == false
                                         select new SelectListItem
                                         {
                                             Value = dpt.DepartmentID.ToString(),
                                             Text = dpt.DepartmentName
                                         }).Where(i => depotNo.Contains(i.Value)).
                                          ToList<SelectListItem>();
        locations.Insert(0, new SelectListItem
        {
            Value = "0",
            Text = "-- Select --"

        });
        return locations;
    }

 

Пожалуйста, помогите найти запрос linq из моего примера

03.08.2020

  • Что не работает? каков результат GetLocationsByDepotForDropdown? Кроме того, чтобы значение было выбрано, вы должны установить свойство Selected из SelectListItem. 03.08.2020
  • Отдельное имя и идентификатор отдела в сравнении с UserId и int[] DepotId. Я передаю Depot как целочисленный массив. Таким образом, все отделы должны быть указаны отдельно от этого идентификатора пользователя и складов. Таким образом, результатом является название отдела и его идентификатор. 03.08.2020
  • Для идентификатора пользователя 1 название отдела должно быть указано «Продажи и учетные записи», для идентификатора пользователя 2 отдел должен быть «Продажи, бухгалтерия, маркетинг». Я должен указать условие запроса DepotId в [ int[] Depot] . Департамент должен быть указан против параметра целочисленного массива Depots 03.08.2020

Ответы:


1

Обратитесь к следующему примеру кода, вы можете использовать предложение GroupBy для удаления повторяющихся записей (на основе свойства text и value), а затем проверить, содержат ли элементы группы выбранное значение (True: IsDefault равно 1; False: IsDefault равно 0):

        var user = "User 2";

        var result = (from udd in usddlist
                      join u in userlist on udd.UserId equals u.Id
                      join d in departmentlist on udd.DepartmentId equals d.Id
                      where u.UserName == user
                      select new
                      {
                          Value = d.Id.ToString(),
                          Text = d.DepartmentName,
                          IsSelected = udd.IsDefault == 1 ? true : false
                      }).GroupBy(c => new { c.Text, c.Value })
              .Select(c =>
              new SelectListItem
              {
                  Value = c.Key.Value,
                  Text = c.Key.Text,
                  Selected = c.Where(d => d.IsSelected == true).ToList().Count == 0 ?false : true
              })
              .Distinct().ToList();

Исходные данные:

       List<Depot> depotlist = new List<Depot>()
        {
            new Depot(){ Id=1, DepotName="Depot 1"},
            new Depot(){ Id=2, DepotName="Depot 2"}
        };

        List<Department> departmentlist = new List<Department>()
        {
            new Department(){ Id=1, DepartmentName="Sales"},
            new Department(){ Id=2, DepartmentName="Account"},
            new Department(){ Id=3, DepartmentName="Marketing"},
        };
        List<User> userlist = new List<User>()
        {
            new User(){ Id=1, UserName="User 1"},
            new User(){ Id=2, UserName="User 2"}
        };

        List<USerDepotDepartmentLink> usddlist = new List<USerDepotDepartmentLink>()
        {
            new USerDepotDepartmentLink(){ UserId = 1, DepotId = 1, DepartmentId = 1,IsDefault=1},
            new USerDepotDepartmentLink(){ UserId = 1, DepotId = 1, DepartmentId = 2,IsDefault=0},
            new USerDepotDepartmentLink(){ UserId = 2, DepotId = 1, DepartmentId = 2,IsDefault=0},
            new USerDepotDepartmentLink(){ UserId = 2, DepotId = 1, DepartmentId = 3,IsDefault=0},
            new USerDepotDepartmentLink(){ UserId = 2, DepotId = 2, DepartmentId = 1,IsDefault=0},
            new USerDepotDepartmentLink(){ UserId = 2, DepotId = 2, DepartmentId = 2,IsDefault=1},
            new USerDepotDepartmentLink(){ UserId = 2, DepotId = 2, DepartmentId = 3,IsDefault=0},
         };

После выполнения приведенного выше кода результат будет таким, как показано ниже (выбранный отдел — учетная запись, свойство «Выбрать продажи и маркетинг» — false):

введите здесь описание изображения

Если вы хотите отсортировать элементы DropDownlist после фильтрации данных, вы можете использовать Метод OrderBy() для сортировки элементов SelectList.

03.08.2020

2

Вы можете использовать приведенный ниже запрос, который даст уникальный отдел, а также можно выбрать требуемый параметр.

List<SelectListItem> locations = (from dpt in goContext.goDepartment
                                      join dep in goContext.goUserDepartment
                                      on dpt.Id equals dep.DepartmentId
                                     where dep.UserId == userId && depotNo.Contains(dep.DepotId)
                                     select new
                                     {
                                         DepartmentId = dep.DepartmentId,
                                         DepartmentName = dpt.DepartmentName
                                     }).Distinct()
                                    .Select(s => new SelectListItem
                                     {
                                         Value = s.DepartmentId.ToString(),
                                         Text = s.DepartmentName,
                                         // Selected = write your logic here based on condition
                                     })
                                     .ToList<SelectListItem>();
03.08.2020
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..