LinqtoEntities多对多选择查询我对下面的查询一头雾水,它是纯T-SQL中的花生。我们有三个物理表:现在我想要做的是获取链接到包含特定搜索字符串名称的Band的MusicStyles列表。乐队名称应该在结果中。T-SQL将是这样的:SELECTb.Name,m.ID,m.Name,m.DescriptionFROMBandbINNERJOINBandMusicStylebmonb.BandId=bm.BandIdINNERJOINMusicStylemonbm.MusicStyleId=米。MusicStyleIdWHEREb.Namelike'%@searchstring%'我如何在LinqToEntities中写这个?PS:由于一些奇怪的原因,StackOverflow不允许搜索字符串“多对多”……事实证明这比看起来简单得多。我使用以下博客文章解决了这个问题:http://weblogs.asp.net/salimfayad/archive/2008/07/09/linq-to-entities-join-queries.aspx这个解决方案的关键在于musicstylecollection在Bands子集上应用bandname过滤器。varresult=(frommin_entities.MusicStylefrombinm.Bandwhereb.Name.Contains(search)selectnew{BandName=b.Name,m.ID,m.Name,m.Description});请注意bINm.Band中的这一行这可确保您仅过滤具有musicstyle的乐队。感谢您的回答,但没有一个能真正解决我的问题。在Linq中,您实际上不需要编写任何东西,如果您在SQL数据库的图形中定义关系并使用实用程序生成它,对象层次结构将自动构建。这意味着如果你这样做:描述};如果查看生成的实体类,BandMusicStyle应该不会出现,因为LINQtoEntities认为Band和MusicStyle是多对多的,表不是必需的。看看有没有效果?您可以执行上述操作,但是一旦您开始迭代它们并且过滤是在内存中而不是数据库中完成的,这将带回所有结果。我认为您正在寻找的只是一些联系?varq=frombindb.Bandsjoinbmindb.BandMusicStyleonononb.BandIdequalsbm.BandIdjoinmsindb.MusicStyleonbm.MusicStyleIdequalsm.MusicStyleIdwhereb.Name.Contains(searchString)选择新{b.Name,ms.ID,ms.Name,ms.Description};或者无论如何从MSinContext.MusicStyleswherems.Bands.Any(b=>b.Name.Contains(search))selectms;这只是返回样式,这就是您的问题所要求的。另一方面,示例SQL返回样式和带区。为此,我将这样做:以上是C#学习教程:LinqtoEntities多对多选择查询分享的全部内容,如果对大家有用需要进一步了解C#学习教程,我希望你多加注意—frombinContext.Bandswhereb.Name.Contains(search)groupbbyband.MusicStyleintogselectnew{Style=g.Key,Bands=g}frombinContext.Bandswhereb.Name.Contains(search)selectnew{BandName=b.Name,MusicStyleId=b.MusicStyle.Id,MusicStyleName=b.MusicStyle.Name,//etc.}本文收集自网络,不代表作品位置。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
