Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Linq 如何从列表创建树列表_Linq_C# 4.0 - Fatal编程技术网

Linq 如何从列表创建树列表

Linq 如何从列表创建树列表,linq,c#-4.0,Linq,C# 4.0,我陷入了将普通列表转换为树型列表的过程中。我必须转换如下格式: 我们可以创建父子关系列表吗 State County Name Name2 County Name3 Name4 下面是我的清单: { "data": [ { "name": "D1", "stateName": "Georgia", "stateId": 1, "countyNa

我陷入了将普通列表转换为树型列表的过程中。我必须转换如下格式: 我们可以创建父子关系列表吗

State
 County
   Name
   Name2
 County
   Name3
   Name4
下面是我的清单:

{
    "data": [  
        {
            "name": "D1",
            "stateName": "Georgia",
            "stateId": 1,
            "countyName": "Apache",
            "countyId": 1
        },
        {
            "name": "D2",
            "stateName": "Georgia",
            "stateId": 1,
            "countyName": "Apache",
            "countyId": 1
        },
        {
            "name": "D3",
            "stateName": "Georgia",
            "stateId": 1,
            "countyName": "Apache",
            "countyId": 1
        },
        {
            "name": "D4",
            "stateName": "Georgia",
            "stateId": 1,
            "countyName": "Apache",
            "countyId": 1
        },
        {
            "name": "D5",
            "stateName": "Georgia",
            "stateId": 1,
            "countyName": "Catron",
            "countyId": 2
        }   
    ],
    "totalRowCount": 0,
    "errors": []
}
有没有办法让我有一个树列表。任何帮助都将不胜感激

我使用下面的树列表代码,但它没有给我正确的数据

var lstTaxLocation = (from loc in _queryEntities.TaxLocations
                                  join st in _queryEntities.States on loc.StateId equals st.Id
                                  join cou in _queryEntities.Counties on loc.CountyId equals cou.Id
                                  group new { loc, st, cou } by new { st.Id } into pg
                                  let datagroup = pg.FirstOrDefault()
                                  let location = datagroup.loc
                                  let state = datagroup.st
                                  let county = datagroup.cou
                                  select new TaxLocationDto
                                  {
                                      Name = location.Name,
                                      StateId = state.Id,
                                      StateName = state.Name,
                                      CountyName = county.Name,
                                      CountyId = county.Id
                                  });

这对于LINQ来说非常简单

假设您的数据已经反序列化为C#对象:

然后,您可以使用LINQ的和


这将为您提供所要查找的结构,但每个“节点”将是整个对象,而不仅仅是
名称
属性。如果需要的话,您也可以得到它,但是将整个对象放在那里很可能不仅仅是一个属性

我不能使用ThenBy方法。谢谢,这是我的错,因为我是第一次开始我的一天
ThenBy
只是
OrderBy
的必然结果。我已经更新了我的答案以满足您的需要。它正在检索数据,但不是类型转换到Ilist。它给了我一个错误“无法将'Grouping[my class]'类型的对象强制转换为类型my class”“。没错。请删除该错误,然后对组进行操作。您可以对该变量执行
foreach
,以获取子组。
public class Data
{
    public string Name { get; set; }
    public string StateName { get; set; }
    public int StateId { get; set; }
    public string CountyName { get; set; }
    public int CountyId { get; set; }
}
var treeList = data.GroupBy(d => d.StateName)
                   .SelectMany(group => group.GroupBy(d => d.CountyName));