请教一个list查询的问题
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace ConsoleApplication2
{
public class node
{
public int id { set; get; }
public string name { set; get; }
public int patentId { set; get; }
public List<node> nodeList { set; get; }
public List<node2> node2List { set; get; }
}
public class node2
{
public int id { set; get; }
public int node_id { set; get; }//node_id是node的id
public string name { set; get; }
}
class Program
{
static void Main(string[] args)
{
//数据格式:
List<node> nodeList = new List<node>{
new node{id=1,patentId=0,name="A"},
new node{id=2,patentId=0,name="B"},
new node{id=3,patentId=0,name="C"},
new node{id=4,patentId=1,name="A-1"},
new node{id=5,patentId=4,name="A-1-1"},
new node{id=6,patentId=2,name="B-1"},
new node{id=7,patentId=4,name="A-1-2"},
};
List<node2> node2List = new List<node2>{
new node2{id=1,node_id=1,name="A的属性"},
new node2{id=2,node_id=1,name="A的属性"},
new node2{id=3,node_id=1,name="A的属性"},
new node2{id=4,node_id=4,name="A-1的属性"},
new node2{id=5,node_id=5,name="A-1-1的属性"},
new node2{id=6,node_id=6,name="B-1的属性"},
new node2{id=7,node_id=2,name="B的属性"},
new node2{id=8,node_id=6,name="B-2的属性"},
new node2{id=9,node_id=6,name="B-2的属性"},
};
//需要的格式:
List<node> result = new List<node>
{
new node{id=1,patentId=0,name="A",
node2List=new List<node2>{/*这里是A的子元素(子元素可能还有子元素)、以及子元素的属性列表List<node2>*/},
nodeList=new List<node>{/*这里是A的属性列表List<node2>*/}},
new node{id=2,patentId=0,name="B",node2List=new List<node2>{},nodeList=new List<node>{}},
new node{id=3,patentId=0,name="C",node2List=new List<node2>{},nodeList=new List<node>{}},
};
//请教下要把nodeList、node2List的数据转化为result格式的数据,应该怎么递归?或其他写法?
}
}
}
请教下要把nodeList、node2List的数据转化为result格式的数据,应该怎么递归?或其他写法? --------------------编程问答-------------------- 这个不需要递归啊,foreach就行了 --------------------编程问答--------------------
--------------------编程问答-------------------- 2楼的好像有点问题,nodelist的易做图子元素没查询出来。。。
//Is this what you want?
void Main()
{
//数据格式:
List<node> nodeList = new List<node>{
new node{id=1,patentId=0,name="A"},
new node{id=2,patentId=0,name="B"},
new node{id=3,patentId=0,name="C"},
new node{id=4,patentId=1,name="A-1"},
new node{id=5,patentId=4,name="A-1-1"},
new node{id=6,patentId=2,name="B-1"},
new node{id=7,patentId=4,name="A-1-2"},
};
List<node2> node2List = new List<node2>{
new node2{id=1,node_id=1,name="A的属性"},
new node2{id=2,node_id=1,name="A的属性"},
new node2{id=3,node_id=1,name="A的属性"},
new node2{id=4,node_id=4,name="A-1的属性"},
new node2{id=5,node_id=5,name="A-1-1的属性"},
new node2{id=6,node_id=6,name="B-1的属性"},
new node2{id=7,node_id=2,name="B的属性"},
new node2{id=8,node_id=6,name="B-2的属性"},
new node2{id=9,node_id=6,name="B-2的属性"},
};
var result=(from n1 in nodeList
let tmp=GetSonID(nodeList,n1.id)
select new node
{
id=n1.id,
patentId=n1.patentId,
name=n1.name,
nodeList=tmp.ToList(),
node2List=node2List.Where(x=>x.node_id==n1.id).ToList()
}).ToList();
}
public IEnumerable<node> GetSonID(List<node> nodeList,int p_id)
{
var query = from c in nodeList
where c.patentId == p_id
select c;
return query.ToList().Concat(query.ToList().SelectMany(t => GetSonID(nodeList,t.id)));
}
public class node
{
public int id { set; get; }
public string name { set; get; }
public int patentId { set; get; }
public List<node> nodeList { set; get; }
public List<node2> node2List { set; get; }
}
public class node2
{
public int id { set; get; }
public int node_id { set; get; }//node_id是node的id
public string name { set; get; }
}
--------------------编程问答-------------------- static void Main(string[] args)
{
//数据格式:
List<node> nodeList = new List<node>{
new node{id=1,patentId=0,name="A"},
new node{id=2,patentId=0,name="B"},
new node{id=3,patentId=0,name="C"},
new node{id=4,patentId=1,name="A-1"},
new node{id=5,patentId=4,name="A-1-1"},
new node{id=6,patentId=2,name="B-1"},
new node{id=7,patentId=4,name="A-1-2"},
};
List<node2> node2List = new List<node2>{
new node2{id=1,node_id=1,name="A的属性"},
new node2{id=2,node_id=1,name="A的属性"},
new node2{id=3,node_id=1,name="A的属性"},
new node2{id=4,node_id=4,name="A-1的属性"},
new node2{id=5,node_id=5,name="A-1-1的属性"},
new node2{id=6,node_id=6,name="B-1的属性"},
new node2{id=7,node_id=2,name="B的属性"},
new node2{id=8,node_id=6,name="B-2的属性"},
new node2{id=9,node_id=6,name="B-2的属性"},
};
//需要的格式:
List<node> result = new List<node>{
new node{id=1,patentId=0,name="A",
node2List=new List<node2>{/*这里是A的子元素(子元素可能还有子元素)、以及子元素的属性列表List<node2>*/},
nodeList=new List<node>{/*这里是A的属性列表List<node2>*/}},
new node{id=2,patentId=0,name="B",node2List=new List<node2>{}, nodeList=new List<node>{}},
new node{id=3,patentId=0,name="C",node2List=new List<node2>{},nodeList=new List<node>{}},
}; //请教下要把nodeList、node2List的数据转化为result格式的数据,应该怎么递归?或其他写法?
List<node> res= Getresult(nodeList, node2List);
Console.ReadKey();
}
static List<node> Getresult(List<node> li1,List<node2> li2) {
List<node> result = new List<node>();
for (int i = 0; i < li1.Count; i++) {
if (li1[i].patentId == 0)
{
result.Add(new node()
{
id = li1[i].id,
patentId = li1[i].patentId,
name = li1[i].name,
nodeList = Getlistnode(li1[i], li1, li2),
node2List = Getlistnode(li1[i], li2)
});
}
}
return result;
}
static List<node> Getlistnode(node n,List<node> li1,List<node2> li2) {
List<node> listnode = new List<node>();
for (int i = 0; i < li1.Count; i++) {
if (n.id == li1[i].patentId) {
listnode.Add(li1[i]);
List<node> lison = Getlistnode(li1[i], li1, li2);
li1[i].nodeList = lison;
li1[i].node2List = Getlistnode(li1[i], li2);
}
}
return listnode;
}
static List<node2> Getlistnode(node n, List<node2> li1)
{
List<node2> listnode2 = new List<node2>();
for (int i = 0; i < li1.Count; i++)
{
if (n.id == li1[i].node_id)
{
listnode2.Add(li1[i]);
}
}
return listnode2;
},用linq的是大神呀 --------------------编程问答--------------------
static void Main(string[] args)--------------------编程问答-------------------- ,敲的好辛苦呢 --------------------编程问答-------------------- 再顶顶,目前不仅仅只有易做图,可能有多级,不能都手写循环吧!
{
//数据格式:
List<node> nodeList = new List<node>{
new node{id=1,patentId=0,name="A"},
new node{id=2,patentId=0,name="B"},
new node{id=3,patentId=0,name="C"},
new node{id=4,patentId=1,name="A-1"},
new node{id=5,patentId=4,name="A-1-1"},
new node{id=6,patentId=2,name="B-1"},
new node{id=7,patentId=4,name="A-1-2"},
};
List<node2> node2List = new List<node2>{
new node2{id=1,node_id=1,name="A的属性"},
new node2{id=2,node_id=1,name="A的属性"},
new node2{id=3,node_id=1,name="A的属性"},
new node2{id=4,node_id=4,name="A-1的属性"},
new node2{id=5,node_id=5,name="A-1-1的属性"},
new node2{id=6,node_id=6,name="B-1的属性"},
new node2{id=7,node_id=2,name="B的属性"},
new node2{id=8,node_id=6,name="B-2的属性"},
new node2{id=9,node_id=6,name="B-2的属性"},
};
//需要的格式:
List<node> result = new List<node>{
new node{id=1,patentId=0,name="A",
node2List=new List<node2>{/*这里是A的子元素(子元素可能还有子元素)、以及子元素的属性列表List<node2>*/},
nodeList=new List<node>{/*这里是A的属性列表List<node2>*/}},
new node{id=2,patentId=0,name="B",node2List=new List<node2>{}, nodeList=new List<node>{}},
new node{id=3,patentId=0,name="C",node2List=new List<node2>{},nodeList=new List<node>{}},
}; //请教下要把nodeList、node2List的数据转化为result格式的数据,应该怎么递归?或其他写法?
List<node> res= Getresult(nodeList, node2List);
Console.ReadKey();
}
static List<node> Getresult(List<node> li1,List<node2> li2) {
List<node> result = new List<node>();
for (int i = 0; i < li1.Count; i++) {
if (li1[i].patentId == 0)
{
result.Add(new node()
{
id = li1[i].id,
patentId = li1[i].patentId,
name = li1[i].name,
nodeList = Getlistnode(li1[i], li1, li2),
node2List = Getlistnode(li1[i], li2)
});
}
}
return result;
}
static List<node> Getlistnode(node n,List<node> li1,List<node2> li2) {
List<node> listnode = new List<node>();
for (int i = 0; i < li1.Count; i++) {
if (n.id == li1[i].patentId) {
listnode.Add(li1[i]);
List<node> lison = Getlistnode(li1[i], li1, li2);
li1[i].nodeList = lison;
li1[i].node2List = Getlistnode(li1[i], li2);
}
}
return listnode;
}
static List<node2> Getlistnode(node n, List<node2> li1)
{
List<node2> listnode2 = new List<node2>();
for (int i = 0; i < li1.Count; i++)
{
if (n.id == li1[i].node_id)
{
listnode2.Add(li1[i]);
}
}
return listnode2;
}
请教请教了
补充:.NET技术 , C#