2012-06-19 14 views
6

Tengo una lista de casilla de verificación en la que el usuario puede marcar o desmarcar la casilla de verificación.Necesito seleccionar una columna en particular según la lista de casilla de verificación

Basándome en la casilla de verificación seleccionada, solía almacenar ese valor por comas separadas. Ahora el problema se basa en la casilla de verificación seleccionada Necesito obtener esa columna en particular sola. en "seleccionar" **

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

si selecciono bajo control cuadro de lista Actualtime, Asunto, así debería ser

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

si selecciono en jaque lista cuadro Asunto, Nombre de archivo , Asignado a, debe ser como

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

la selección será dinámica en función del ch seleccionado lista de caja eck

+2

Y la pregunta es? Explica tu código más ¿Cómo se representan las casillas de verificación en el código, es que las 'Tareas'? También sería más fácil si mostrara la entrada y la salida esperada. –

+0

Entonces, estas casillas de verificación se usan para hacer que el usuario seleccione qué columnas quiere seleccionar ??? –

+3

La respuesta que busca podría estar aquí http://stackoverflow.com/questions/606104/how-to-create-linq-expression-tree-with-anonymous-type-in-it –

Respuesta

2

agregue DynamicLibrary.cs a su proyecto. Puede obtenerlo de este link. Es un archivo zip que contiene la fuente de enlace dinámico. No es un dll. Publicada originalmente en el blog de ScottGu here. para referencia vea este desbordamiento de pila link.

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); 
     } 
    } 
+0

en dynamic linq query foreign key object no funciona. así que creé un modelo y le asigné ese valor a ese modelo. error es que la conexión ha expirado. – Thulasiram

+0

Gracias por el enlace del blog Gu, dediqué un tiempo a explorar SO para encontrar algunas respuestas a un problema dinámico de linq, con innumerables soluciones extrañas, ¡entonces descubrí que Gu lo dejó todo tan claro hace 5 años! –

+0

@ThulasiRam, ¿te importaría echarle un vistazo a mi pregunta? Estoy tratando de implementar la consulta Dynamic LINQ, pero estoy teniendo problemas para ponerme en marcha y revisar los ejemplos de Scott y de ustedes. ¡Gracias! https://stackoverflow.com/questions/28903387/implementing-dynamic-linq-querying-in-mvc5-ef-application –

Cuestiones relacionadas