Linq to Entities多对多选择查询

Pet*_*ter 18 c# t-sql linq-to-entities

我对以下查询感到茫然,这是普通T-SQL中的花生.

我们有三个物理表:

  • 乐队(PK = BandId)
  • MusicStyle(PK = MuicStyleId)
  • BandMusicStyle(PK = BandId + MusicStyleId,FK = BandId,MusicStyleId)

现在我要做的是获取一个链接到Band的MusicStyles列表,其中包含一个特定搜索字符串的名称.带名应该在结果中.

T-SQL将是这样的:

SELECT b.Name, m.ID, m.Name, m.Description
FROM Band b 
INNER JOIN BandMusicStyle bm on b.BandId = bm.BandId
INNER JOIN MusicStyle m on bm.MusicStyleId = m.MusicStyleId
WHERE b.Name like '%@searchstring%'
Run Code Online (Sandbox Code Playgroud)

我如何在Linq To Entities中写这个?

PS:由于某些奇怪的原因,StackOverflow不允许搜索字符串'many to many'...

Pet*_*ter 27

事实证明这比看起来简单得多.我使用以下博文解决了这个问题:http://weblogs.asp.net/salimfayad/archive/2008/07/09/linq-to-entities-join-queries.aspx

此解决方案的关键是将乐队名称的过滤器应用于musicstyle集合的Bands子集.

var result=(from m in _entities.MusicStyle 
            from b in m.Band
            where b.Name.Contains(search)
            select new {
                BandName = b.Name,
                m.ID,
                m.Name,
                m.Description
            });
Run Code Online (Sandbox Code Playgroud)

注意这条线

from b IN m.Band
Run Code Online (Sandbox Code Playgroud)

这可以确保您只对具有musicstyle的乐队进行过滤.

谢谢你的答案,但没有一个真正解决了我的问题.