2017-06-12 7 views
1

I visjs.net bin mit einem ZeitplanBestücken eine Liste, die ein Array mit Linq enthält

Probleme Ich habe anzuzeigen LINQ Schreiben eine Liste zu füllen, das eine Eigenschaft enthält, die ein Array

ist hier Dokumentation ist die visjs visjs doco

und einige Beispiel-Code visjs source code

Hier eine gekürzte Version der Probe in JavaScript ist. Ich brauche diese JSON von einem MVC-Controller

var groups = new vis.DataSet(); 

    groups.add([ 
    { 
     id: 1, 
     content: "Lee", 
     nestedGroups: [11,12] 
    } 
    ]); 

    groups.add([ 
    { 
     id: 11, 
     content: "cook", 
    }, 
    { 
     id: 12, 
     content: "shop", 
    } 
    ]); 

Spoiler alert statt Javascript zu füllen: Ich weiß nicht, wie die nestedGroups Eigenschaft füllen

Dies ist die Klasse I für sie gebaut:

public class TimelineGroups 
    { 
     public int id { get; set; } 
     public string content { get; set; } 
     public string className { get; set; } 
     public string orderBy { get; set; } 
     public string[] nestedGroups { get; set; } 
    } 

Dies ist die Controller-Methode, die es, mit Ausnahme der nestedGroups Eigenschaft auffüllt, und das funktioniert ganz gut:

public JsonResult EmployeeGroups() 
    { 
     List<TimelineGroups> e = (
      from emp in db.Employees 
      where emp.Emp_Status == 1 && emp.EmployeeRole.IsChargeable == "Y" 
      orderby emp.EmpRole_ID, emp.Emp_Last_Name 
      select new TimelineGroups() 
      { 
       id = emp.Emp_ID, 
       content = emp.Emp_Name, 
       orderBy = emp.EmpRole_ID.ToString(), 
       className = "bte-" + emp.EmployeeRole.EmpRoleName 
      } 
      ).ToList(); 

     return Json(e, JsonRequestBehavior.AllowGet); 
    } 

Das funktioniert alles korrekt, aber jetzt möchte ich verschachtelte Gruppen hinzufügen.

Aber ich weiß nicht, die LINQ benötigt, um die erforderlichen Daten in einem Array innerhalb einer Sammlung zu "schwenken".

Dies ist, was ich bisher:

public JsonResult EmployeeClientGroups() 
{ 
    // First load the client list which are children of employees 
    List<TimelineGroups> cg = (
     from sw in db.ScheduleWorks 
     where sw.EndDate > DateTime.Now 
     select new TimelineGroups() 
     { 
      id = sw.Employee.Emp_ID * 1000 + sw.CustomerId, 
      content = sw.Customer.Customer_Name 
     }).Take(1000).Distinct().ToList(); 

    // now load the employee list 
    // This includes client children 
    List<TimelineGroups> eg = (
     from sw in db.ScheduleWorks 
     where sw.EndDate > DateTime.Now 
     select new TimelineGroups() 
     { 
      id = sw.Employee.Emp_ID, 
      // How do I populate this with sw.Employee.Emp_ID * 1000 + sw.CustomerId 
      nestedGroups = // What magic do I put here? 
      content = sw.Employee.Emp_Name, 
     }).Take(1000).Distinct().ToList(); 

    // Add the employee groups to the client groups 
    cg.AddRange(eg); 

    return Json(cg, JsonRequestBehavior.AllowGet); 

} 

ich alle Client-IDs für einen bestimmten Mitarbeiter und „schwenken“, um sie in ein Array, passend posten als JSON

erhalten müssen um sie einzigartig zu machen und die Kinder-IDs entsprechen, I der Wert müssen schwenkbar ist:

sw.Employee.Emp_ID * 1000 + sw.CustomerId

Kann diese inline in einer LINQ-Anweisung durchgeführt werden?

+0

AFAIK können Sie hinzufügen, in einem LINQ 'select', aber in diesem Fall versuchen Sie,' int' Wert zu einem 'string []' Array, das ist sicherlich eine ungültige Besetzung. Überprüfen Sie diese vereinfachte Fiedel und lassen Sie mich wissen, wenn Sie 'new string []' in 'nestedGroups' deklarieren, was Sie tun möchten: https://dotnetfiddle.net/40lDp9. –

+0

Danke, dass du dir die Zeit genommen hast, eine Geige aufzustellen. Ich werde diese Lösung heute Nacht versuchen. Ich hoffe es ist wirklich so einfach! –

+0

Für die Beispieldaten, die Sie freundlicherweise vorbereitet haben, sollte ich ein Mitglied der Liste mit Id = 1234 und nestedGroups = (Array von 1,2,3,4,5,6) sehen. Ich werde zu dir zurückkommen, nachdem ich es ausprobiert habe –

Antwort

1

So stellt sich heraus das war Art beantwortet von here aber ich werde meine Lösung

Dies ist der Code-Dokument, das ich schließlich verwendet:

public class TimelineGroups 
    { 
     public string id { get; set; } 
     public string content { get; set; } 
     public string className { get; set; } 
     public string orderBy { get; set; } 
     public List<string> nestedGroups { get; set; } 
    } 


     List<TimelineGroups> eg = (
      from sw in db.ScheduleWorks 
      where sw.EndDate > DateTime.Now 
      where sw.Employee.Emp_Status == 1 

      group (sw.EmployeeId.ToString() + "." + sw.CustomerId.ToString()) 
      by new { 
       id = sw.EmployeeId.ToString(), 
       EmpName = sw.Employee.Emp_Name, 
       EmpOrder = sw.Employee.EmpRole_ID.ToString() 
      } 

      into g 

      select new TimelineGroups() 
      { 
       id = g.Key.id, 
       // find the list of employee+client keys 
       nestedGroups = g.ToList(), 
       content = g.Key.EmpName, 
       orderBy = g.Key.EmpOrder 
      }) 
      .Take(1000) 
      .ToList(); 
  • Hinweis kein Distinct
  • Das Argument zu group ist das Feld mit den Werten, die ich "pivot"
  • dann den Teil nach by ist der eigentliche "Schlüssel", der auf
  • gruppiert wird. Ich brauchte ein List() anstatt ein Array (vielleicht hätte ich ToArray obwohl verwendet werden könnte?)
  • Sobald diese in eine Zwischengröße g gruppiert ist, können Sie g.ToList() verwenden den ‚geschwenkt‘

Hoffentlich Werte zu bekommen dies jemand anderen Tag helfen, vielleicht sogar jemand die visjs Bibliothek

mit

@Tetsuya Yamamoto Geige wies mich in die richtige Richtung

Verwandte Themen