求实现多对多查询的思路

number1170196649 2013-05-02 10:56:40
现在有产品(Product){PID,PName}和产品分类(Category){CID,CName}为多对多的关系,有一个中间表假设为(PC){PID,CID}。现在我需要查询到Product对应的所有产品分类的名称,用逗号分隔。能否使用SQL语句直接实现。或者使用Entity Framework 实现。可以使用导航属性获取Product中的PCs,现在我想使用一个匿名类型将产品信息和对应的分类名称查询出来:比如(PID1,PName1,{CName1,CName2……})
...全文
7168 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
number1170196649 2013-08-03
  • 打赏
  • 举报
回复
引用 7 楼 bianwo 的回复:
这个问题我确定我会,显然40分太少了,这是EF里最难写的查询之一,因为很明显楼主的数据中存在空对应,不是所有产品都被分类了,EF处理这种情况非常复杂。 估计楼主也不在了,闪人。
既然会的话还望不吝赐教,分数可能分配的不合理,还望见谅!
NET小工 2013-05-09
  • 打赏
  • 举报
回复
这个问题我确定我会,显然40分太少了,这是EF里最难写的查询之一,因为很明显楼主的数据中存在空对应,不是所有产品都被分类了,EF处理这种情况非常复杂。 估计楼主也不在了,闪人。
number1170196649 2013-05-04
  • 打赏
  • 举报
回复
这个问题认真思考。很多相似。
number1170196649 2013-05-03
  • 打赏
  • 举报
回复
引用 4 楼 q107770540 的回复:
var query=db.PC.GroupBy(pc=>new{pc.Product.PID,pc.Product.PName}).ToList() .Select(g=>new {PID=g.Key.PID,PName=g.Key.PName,CName=string.Join(",",g.Select(x=>x.Categroy.CName).ToArray())});
虽然不成功,但是还是谢谢您的耐心解答。提示“未将对象引用设置到对象的实例。 ” 请问有没有这方面的资料?
q107770540 2013-05-02
  • 打赏
  • 举报
回复
var query=db.PC.GroupBy(pc=>new{pc.Product.PID,pc.Product.PName}).ToList() .Select(g=>new {PID=g.Key.PID,PName=g.Key.PName,CName=string.Join(",",g.Select(x=>x.Categroy.CName).ToArray())});
number1170196649 2013-05-02
  • 打赏
  • 举报
回复
引用 1 楼 q107770540 的回复:
var query=db.PC.GroupBy(pc=>pc.Product.PID)
               .Select(g=>new {PID=g.Key,PName=g.First().Product.PName,CName=string.Join(",",g.Select(x=>x.Categroy.CName).ToArray())});
改为FirstOrDefault后,出现“LINQ to Entities 不识别方法“System.String Join(System.String, System.String[])”,因此该方法无法转换为存储表达式。”
number1170196649 2013-05-02
  • 打赏
  • 举报
回复
引用 1 楼 q107770540 的回复:
var query=db.PC.GroupBy(pc=>pc.Product.PID)
               .Select(g=>new {PID=g.Key,PName=g.First().Product.PName,CName=string.Join(",",g.Select(x=>x.Categroy.CName).ToArray())});
提示“方法“First”只能用作最终查询操作。请考虑在该实例中改用方法“FirstOrDefault”。”
q107770540 2013-05-02
  • 打赏
  • 举报
回复
var query=db.PC.GroupBy(pc=>pc.Product.PID)
.Select(g=>new {PID=g.Key,PName=g.First().Product.PName,CName=string.Join(",",g.Select(x=>x.Categroy.CName).ToArray())});

8,497

社区成员

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

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