Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq填充包含数组的列表_C#_Json_Linq To Sql_Asp.net Mvc 5_Vis.js - Fatal编程技术网

C# 使用linq填充包含数组的列表

C# 使用linq填充包含数组的列表,c#,json,linq-to-sql,asp.net-mvc-5,vis.js,C#,Json,Linq To Sql,Asp.net Mvc 5,Vis.js,我正在使用visjs.net显示时间表 我在编写LINQ以填充包含数组属性的列表时遇到问题 这是visjs文档 和一些示例代码 下面是javascript中示例的简化版本。我需要从MVC控制器而不是javascript填充此JSON var groups = new vis.DataSet(); groups.add([ { id: 1, content: "Lee", nestedGroups: [11,12] } ]);

我正在使用visjs.net显示时间表

我在编写LINQ以填充包含数组属性的列表时遇到问题

这是visjs文档

和一些示例代码

下面是javascript中示例的简化版本。我需要从MVC控制器而不是javascript填充此JSON

  var groups = new vis.DataSet();

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

  groups.add([
    {
      id: 11,
      content: "cook",
    },
    {
      id: 12,
      content: "shop",
    }
  ]);
剧透警报:我不知道如何填充nestedGroups属性

这是我为它构建的类:

    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; }
    }
这是填充它的控制器方法,不包括nestedGroups属性,它可以正常工作:

    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);
    }
public JsonResult EmployeeGroups()
{
清单e=(
来自db员工的emp
其中emp.emp_Status==1&&emp.EmployeeRole.IsChargeable==Y
orderby emp.emp角色\u ID,emp.emp\u姓氏
选择新的TimelineGroups()
{
id=emp.emp\u id,
内容=emp.emp\u名称,
orderBy=emp.EmpRole\u ID.ToString(),
className=“bte-”+emp.EmployeeRole.emploleName
}
).ToList();
返回Json(e,JsonRequestBehavior.AllowGet);
}
这一切都正常工作,但现在我想添加嵌套组

但我不知道将所需数据“透视”到集合中的数组所需的LINQ

这就是我到目前为止所做的:

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);

}
public JsonResult EmployeeClientGroups()
{
//首先加载作为员工子女的客户机列表
列表cg=(
来自db.ScheduleWorks中的sw
其中sw.EndDate>DateTime.Now
选择新的TimelineGroups()
{
id=sw.Employee.Emp_id*1000+sw.CustomerId,
内容=sw.Customer.Customer\u名称
}).Take(1000.Distinct().ToList();
//现在加载员工列表
//这包括客户的孩子
列表eg=(
来自db.ScheduleWorks中的sw
其中sw.EndDate>DateTime.Now
选择新的TimelineGroups()
{
id=sw.Employee.Emp_id,
//如何使用sw.Employee.Emp_ID*1000+sw.CustomerId填充此文件
nestedGroups=//我在这里放了什么魔法?
content=sw.Employee.Emp_Name,
}).Take(1000.Distinct().ToList();
//将员工组添加到客户端组
cg.AddRange(eg);
返回Json(cg,JsonRequestBehavior.AllowGet);
}
我需要获取给定员工的所有客户机ID,并将它们“透视”到一个数组中,适合作为JSON发回

要使它们唯一并匹配子id,我需要输入的值为:

sw.Employee.Emp_ID*1000+sw.CustomerId


这可以在LINQ语句中内联完成吗?

因此,事实证明这是一种回答,但我将记录我的解决方案

这是我最终使用的代码:

    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();
公共类时间线组
{
公共字符串id{get;set;}
公共字符串内容{get;set;}
公共字符串类名{get;set;}
公共字符串orderBy{get;set;}
公共列表嵌套组{get;set;}
}
列表eg=(
来自db.ScheduleWorks中的sw
其中sw.EndDate>DateTime.Now
其中sw.Employee.Emp_Status==1
组(sw.EmployeeId.ToString()+“+sw.CustomerId.ToString())
由新{
id=sw.EmployeeId.ToString(),
EmpName=sw.Employee.Emp_Name,
EmpOrder=sw.Employee.EmpRole\u ID.ToString()
}
进入g
选择新的TimelineGroups()
{
id=g.Key.id,
//查找员工+客户机密钥列表
nestedGroups=g.ToList(),
content=g.Key.EmpName,
orderBy=g.Key.EmpOrder
})
.取(1000)
.ToList();
  • 注:无
    Distinct
  • group
    的参数是保存我要“透视”的值的字段
  • 然后,
    by
    后面的部分是将分组的实际“键”
  • 我需要使用
    List()
    而不是数组(也许我可以使用
    ToArray
  • 将其分组到中间变量
    g
    中后,可以使用
    g.ToList()
    获取“枢轴”值
希望有一天这会帮助其他人,甚至可能帮助使用visjs库的人


@Tetsuya Yamamoto fiddle为我指出了正确的方向

AFAIK您可以在LINQ
select
中执行加法,但在本例中,您尝试将
int
值插入到
字符串[]
数组中,这肯定是无效的强制转换。检查此简化小提琴,并告诉我您是否要向
nestedGroups
声明
新字符串[]
。感谢您花时间设置小提琴。今晚我要试试这个办法。我希望这真的是那么容易!对于您精心准备的示例数据,我应该看到列表中的一个成员,Id=1234,nestedGroups=(1,2,3,4,5,6的数组)。我试过之后会给你回复我想这是我的答案,但我正在努力理解@TetsuyaYamamoto的语法,再次感谢你花时间为我制作小提琴。我希望你不介意,我把你的小提琴拉得更远了一点,并记录了我的结果。