linq怎么写,1对多关系

落阳 2012-08-15 03:01:18
A表数据:
ID Content
1 内容哈哈哈哈

B表数据:
ID AID UserID
1 1 2012
2 1 2013
3 1 2014

我要的数据集是:
ID Content UserIDs
1 内容哈哈哈哈 2012,2013,2014

由于特殊关系,实体中并未对B实体的AID字段添加外键关系。所以只能以groupjoin的方式来关联查询。

之前发错板块。

猫哥在原帖给出了解决方法,后发现仍旧有缺陷。特来linq板块询问。

void Main()
{
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},
};

var query=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())
};

}
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;}
}

以上是猫哥给的LINQ写法,以下是猫哥给的lambda写法。
var query=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())
});


但是发现问题,报错:
LINQ to Entities 不识别方法“System.String Join(System.String, System.String[])”,因此该方法无法转换为存储表达式。

我尝试百度过解决方法,发现其他的例子与我的不太一样。

请教各位。
...全文
151 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
原来是LIST()的原因。自我结贴~
[/Quote]
其实是,用.ToList()将LINQ TO EF 转化成了LINQ TO Object
烟波钓 2012-08-15
  • 打赏
  • 举报
回复
那就不厚道的接分了
落阳 2012-08-15
  • 打赏
  • 举报
回复
原来是LIST()的原因。自我结贴~

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧