Вопрос по entity-framework, c#, asp.net-mvc, linq – Мне нужно выбрать конкретный столбец на основе списка флажков

6

У меня есть список флажков, в котором пользователь может установить или снять флажок.

На основе установленного флажка я использовал для хранения этого значения через запятую. Теперь проблема основана на выбранном флажке, мне нужно получить этот конкретный столбец в одиночку. в & quot; выберите & quot; **

db.Tasks.OrderBy(t => t.CreatedDate).ToList()
  .Select(t => new {
       Id = t.Id, 
       PriorityId = t.ProjectId, 
       Priority = t.Priority, 
       StatusId = t.StatusId, 
       Status = t.Status,
       EstimatedTime = t.EstimatedTime, 
       ActualTime = t.ActualTime, 
       Subject = t.Subject, 
       FileName = t.FileName,
       AssignedTo = t.AssignedTo, 
       Project = t.Project 
   }).ToList();

enter image description here

если я выберу в списке флажков ActualTime, Subject, это должно быть как

db.Tasks.OrderBy(t => t.CreatedDate).ToList()
  .Select(t => new {
       Id = t.Id,       
       ActualTime = t.ActualTime, 
       Subject = t.Subject
   }).ToList();

если я выберу в списке флажков Subject, FileName, AssignedTo, это должно быть как

db.Tasks.OrderBy(t => t.CreatedDate).ToList()
  .Select(t => new {
           Id = t.Id,  
           Subject = t.Subject, 
           FileName = t.FileName,
           AssignedTo = t.AssignedTo
       }).ToList();

выбор будет динамическим в зависимости от выбранного флажка списка.

А вопрос такой? Объясните свой код больше. Как флажки представлены в коде, является то, чтоTasks? Также было бы проще, если бы вы показали вход и ожидаемый результат. Tomas Jansson
Почему бы просто не получить все столбцы, а затем скрыть / отобразить столбцы на странице, как показывают флажки? Это было бы намного проще. rikitikitik
Я также смущен тем, что актуальный вопрос здесь. Tom Bushell
Ответ, который вы ищете, может быть здесьstackoverflow.com/questions/606104/… Mike Miller
Итак, эти флажки используются, чтобы заставить пользователя выбирать, какие столбцы он хочет выбрать ??? Mahmoud Gamal

Ваш Ответ

1   ответ
2

add DynamicLibrary.cs to your project. You can get it from this ссылка на сайт , Это zip-файл, который содержит источник динамической ссылки. Это не dll.  Первоначально опубликовано в блоге ScottGuВот. for reference see this stack overflow ссылка на сайт .

    using System.Linq.Dynamic;

    public class DynamicColumns : BaseEntity
    {
        public string User { get; set; }
        public string TaskId { get; set; }
        public string Project { get; set; }
        public string Priority { get; set; }
        public string TaskType { get; set; }
        public string Version { get; set; }
        public string Module { get; set; }
        public string Subject { get; set; }
        public string Details { get; set; }
        public string FileName { get; set; }
        public string Status { get; set; }          
        public string AssignedBy { get; set; }
        public string AssignedTo { get; set; }
        public int ActualTime { get; set; }
        public int LogWork { get; set; }
        public DateTime CreatedDate { get; set; }
        public DateTime AssignedDate { get; set; }
        public DateTime ResolveDate { get; set; }
        public int EstimatedTime { get; set; }
    }

    public enum EnumTasks
    {

        User = 1,
        Project = 2,
        Priority = 3,
        TaskType = 4,
        Version = 5,
        Module = 6,
        Subject = 7,
        Details = 8,          
        Status = 9,            
        Assigned_By = 10,
        Assigned_To = 11,
        Created_Date = 12,
        Assigned_Date = 13,
        Resolve_Date = 14,
        Estimated_Time = 15,
        Actual_Time = 16,
        LogWork = 17
    }

    public IQueryable DynamicSelectionColumns()
    {
        using (var db = new TrackerDataContext())
        {
            string fieldIds = "," + "4,5,3,2,6,17,11,12" + ",";

            var taskColum = Enum.GetValues(typeof(EnumTasks)).Cast<EnumTasks>().Where(e => fieldIds.Contains("," + ((int)e).ToString() + ",")).Select(e => e.ToString().Replace("_", ""));

            string select = "new (  TaskId, " + (taskColum.Count() > 0 ? string.Join(", ", taskColum) + ", " : "") + "Id )";

            return db.Task.ToList().Select(t => new DynamicColumns() { Id = t.Id, TaskId = Project != null ? Project.Alias + "-" + t.Id : t.Id.ToString(), ActualTime = t.ActualTime, AssignedBy = t.AssignedBy.ToString(), AssignedDate = t.AssignedDate, AssignedTo = t.AssignedTo.ToString(), CreatedDate = t.CreatedDate, Details = t.Details, EstimatedTime = t.EstimatedTime, FileName = t.FileName, LogWork = t.LogWork, Module = t.Module != null ? t.Module.Name : "", Priority = t.Priority != null ? t.Priority.Name : "", Project = t.Project != null ? t.Project.Name : "", ResolveDate = t.ResolveDate, Status = t.Status != null ? t.Status.Name : "", Subject = t.Subject, TaskType = t.TaskType != null ? t.TaskType.Type : "", Version = t.Version != null ? t.Version.Name : "" }).ToList().AsQueryable().Select(select);
        }
    }
в динамическом запросе linq объект внешнего ключа не работает. так что я создал одну модель и присвоил это значение этой модели. ошибка подключения истекла Thulasiram
@ThulasiRam, не могли бы вы взглянуть на мой вопрос? Я пытаюсь реализовать динамические запросы LINQ, но у меня возникают некоторые проблемы с настройкой и работой при просмотре как Скотта, так и ваших примеров. Спасибо!stackoverflow.com/questions/28903387/…
Спасибо за ссылку в блоге Gu, потратил некоторое время на поиски SO для некоторых ответов на динамическую проблему linq с бесчисленными странными решениями, а потом я обнаружил, что Gu сделал это так ясно 5 лет назад!

Похожие вопросы