日期:2014-05-20 浏览次数:21054 次
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
IList<Area> list = new List<Area>();
list.Add(new Area() { Uid=1, Pid=0, Name="电信" });
list.Add(new Area() { Uid=2, Pid=0, Name="联通" });
list.Add(new Area() { Uid=3, Pid=0, Name="移动" });
list.Add(new Area() { Uid=4, Pid=1, Name="电信一区" });
list.Add(new Area() { Uid=5, Pid=1, Name="电信二区" });
// 用linq查询得到 uid、name
// name中显示父级-子级-子子级。。。。,只要最后一级
// 结果:
//uid name
//2 联通
//3 移动
//4 电信-电信一区
//5 电信-电信二区
}
}
public class Area
{
public int Uid { get; set; }
public int Pid { get; set; }// 父ID
public string Name { get; set; }
}
void Main()
{
IList<Area> list = new List<Area>();
list.Add(new Area() { Uid=1, Pid=0, Name="电信" });
list.Add(new Area() { Uid=2, Pid=0, Name="联通" });
list.Add(new Area() { Uid=3, Pid=0, Name="移动" });
list.Add(new Area() { Uid=4, Pid=1, Name="电信一区" });
list.Add(new Area() { Uid=5, Pid=1, Name="电信二区" });
var query=from l in list
select new
{
Uid=l.Uid,
Name=l.Pid==0?l.Name : list.First(m=>m.Uid==l.Pid).Name+"-"+l.Name
};
}
public class Area
{
public int Uid { get; set; }
public int Pid { get; set; }// 父ID
public string Name { get; set; }
}
------解决方案--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Area> list = new List<Area>();
list.Add(new Area() { Uid = 1, Pid = 0, Name = "电信" });
list.Add(new Area() { Uid = 2, Pid = 0, Name = "联通" });
list.Add(new Area() { Uid = 3, Pid = 0, Name = "移动" });
list.Add(new Area() { Uid = 4, Pid = 1, Name = "电信一区" });
list.Add(new Area() { Uid = 5, Pid = 1, Name = "电信二区" });
list.Add(new Area() { Uid = 6, Pid = 5, Name = "电信二区之一" });
Func<int, int> FindRoot = (x) => x;
FindRoot = (x) => list.First(y => y.Uid == x).Pid == 0 ? list.First(y => y.Uid == x).Uid : FindRoot(list.First(y => y.Uid == x).Pid);
var query = from l in list
select new
{
Uid = l.Uid,
Name = l.Pid == 0 ? l.Name : list.First(m => m.Uid == FindRoot(l.Uid)).Name + "-" + l.Name
};
foreach (var item in query)
{
Console.WriteLine(item.Uid + "," + item.Name);
}
}
}
class Area
{
public int Uid { get; set; }
public int Pid { get; set; }
public string Name { get; set; }
}
}
------解决方案--------------------
IList<Area> list = new List<Area>();
list.Add(new Area() { Uid = 1, Pid = 0, Name = "电信" });
list.Add(new Area() { Uid = 2, Pid = 0, Name = "联通" });
list.Add(new Area() { Uid = 3, Pid = 0, Name = "移动" });
list.Add(new Area() { Uid = 4, Pid = 1, Name = "电信一区" });
list.Add(new Area() { Uid = 5, Pid = 1, Name = "电信二区" });
list.Add(new Area() { Uid = 6, Pid = 0, Name = "Test" });
list.Add(new Area() { Uid = 7, Pid = 6, Name = "Test1" });
list.Add(new Area() { Uid = 8, Pid = 7, Name = "Test11" });
Console.WriteLine("uid\t\tname");
foreach (var area in list.Where(a => !list.Any(l => l.Pid == a.Uid)))
{
Console.WriteLine("{0}\t\t{1}", area.Uid, area.Name);
}
Console.ReadLine();