今天的论坛上看到一网友提出这样一个问题:
A表数据:
ID Content
1 内容哈哈哈哈
B表数据:
ID AID UserID
1 1 2012
2 1 2013
3 1 2014
我要的数据集是:
ID Content UserIDs
1 内容哈哈哈哈 2012,2013,2014
这样我想到可以用 LINQ的Group Join来解决:
//构造类
public class A
{
public int ID{get;set;}
public string Content{get;set;}
}
public class B
{
public int ID{get;set;}
public int AID{get;set;}
public int UserID{get;set;}
}
//初始化数据:
var listA=new List<A>(){new A{ ID=1, Content="aaaaaaaaaa"}};
var listB=new List<B>()
{
new B{ ID=1, AID=1, UserID=2012},
new B{ ID=2, AID=1, UserID=2013},
new B{ ID=3, AID=1, UserID=2014},
};
下边就是执行查询了:
//Group Join的Lamda表达式写法:
var QueryWithLamda=listA.GroupJoin(listB,
a=>a.ID,
b=>b.AID,
(a,t)=>new
{
ID=a.ID,
Content=a.Content,
UserIDs=string.Join(",",t.Select(x=>x.UserID.ToString()).ToArray())
});
//Group Join的标准表达式写法:
var QueryWithStandard=from a in listA
join b in listB
on a.ID equals b.AID into t
select new
{
ID=a.ID,
Content=a.Content,
UserIDs=string.Join(",",t.Select(x=>x.UserID.ToString()).ToArray())
};
最后:
QueryWithLamda 和QueryWithStandard 都是想要的结果.