id name
1 a
2 b
3 c
4 d
id pid name
1 1 aa
2 1 ab
3 2 ba
4 2 bb
5 5 ea
6 6 faresult:
id pname name
1 a aa,ab
2 b ba,bb
3 c
4 d
- - ed,fa
1 a
2 b
3 c
4 d
id pid name
1 1 aa
2 1 ab
3 2 ba
4 2 bb
5 5 ea
6 6 faresult:
id pname name
1 a aa,ab
2 b ba,bb
3 c
4 d
- - ed,fa
{
var list1=new List<tb1>
{
new tb1{ id=1, name="a"},
new tb1{ id=2, name="b"},
new tb1{ id=3, name="c"},
new tb1{ id=4, name="d"},
};
var list2=new List<tb2>
{
new tb2{ id=1,pid=1, name="aa"},
new tb2{ id=2,pid=1, name="ab"},
new tb2{ id=3,pid=2,name="ba"},
new tb2{ id=4,pid=2,name="bb"},
new tb2{ id=5,pid=5,name="ea"},
new tb2{ id=6,pid=6,name="fa"},
};
var query=(from t1 in list1
join t2 in list2
on t1.id equals t2.pid into t
select new
{
id=t==null?"-":t1.id.ToString(),
pname=t==null?"":t1.name,
name=t==null?"":string.Join(",",t.Select(x=>x.name).ToArray())
}).Concat(Enumerable.Range(0,1).Select(s=>
new
{
id="-",
pname="-",
name=string.Join(",",list2.Where(l=>!list1.Select(x=>x.id).Contains(l.pid)).Select(x=>x.name).ToArray())
}));
}class tb1
{
public int id {get;set;}
public string name {get;set;}
}class tb2
{
public int id {get;set;}
public int pid {get;set;}
public string name {get;set;}
}
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{
class PTable
{
public int id { get; set; }
public string name { get; set; }
} class CTable
{
public int id { get; set; }
public int pid { get; set; }
public string name { get; set; }
} class Program
{
static void Main(string[] args)
{
var list1 = new List<PTable>()
{
new PTable() { id = 1, name = "a" },
new PTable() { id = 2, name = "b" },
new PTable() { id = 3, name = "c" },
new PTable() { id = 4, name = "d" },
}; var list2 = new List<CTable>()
{
new CTable() { id = 1, pid = 1, name = "aa" },
new CTable() { id = 2, pid = 1, name = "ab" },
new CTable() { id = 3, pid = 2, name = "ba" },
new CTable() { id = 4, pid = 2, name = "bb" },
new CTable() { id = 5, pid = 5, name = "ea" },
new CTable() { id = 6, pid = 6, name = "fa" },
}; var query = list1.GroupJoin(list2, x => x.id, x => x.pid, (x, y) => new { id = x.id.ToString(), pname = x.name, name = y.Select(z => z.name) })
.Concat(Enumerable.Range(1, 1).Select(x => new { id = "-", pname = "-", name = list2.Where(z => !list1.Select(y => y.id).Contains(z.pid)).Select(z => z.name) })); foreach (var item in query)
{
Console.WriteLine("{0}\t{1}\t{2}", item.id, item.pname, string.Join(", ", item.name));
}
}
}
}1 a aa, ab
2 b ba, bb
3 c
4 d
- - ea, fa
Press any key to continue . . .