0

我有下表

**MemberMst**
MemberID Name      Hobbies
1        Ronak     1,3,4
2        Kapil     2,4

**HobbiesMst**
HobbyId   Title
1         Computer Game
2         Cricket
3         Skating
4         Basket Ball

Member master 中的 Hobbies 是来自 HobbiesMst 的值。现在我想要来自 HobbiesMst 的成员的爱好。使用 linq 查询。我尝试拆分、包含、SelectMany 但无法编译。

所以我很困惑如何在这种情况下做多对多关系。

i want below output.
==============================================
MemberId Name     Title
1        Ronak    Computer Game
1        Ronak    Skating
1        Ronak    Basket Ball
2        Kapil    Cricket
2        Kapil    Basket Ball
4

3 回答 3

0

您听起来好像在正确的轨道上,以下应该编译...

var query = MemberMst.SelectMany(
                mem => HobbyMst.Where(hob => mem.Contains(hob.HobbyId)),
                (mem,hob) => new 
                {
                 MemberId = mem.MemberId, 
                 Name = mem.Name, 
                 Title = hob.Title
                })
于 2013-01-12T12:36:22.100 回答
0

如果您想在两个表之间建立多对多关系,您应该创建第三个表来处理该关系。在您的情况下,架构应该是这样的:

    MemberMst                 Member_Hobbie                 HobbiesMst
MemberId   Name           Id   MemberId   HobbiId         HobbyId   Title

Member_Hobbies 表中的每条记录都显示了特定成员的特定爱好。

于 2013-01-12T10:06:11.923 回答
0

你可以试试这个。

var result = from record in 
                (
                    from transform in MemberMst.AsEnumerable( )
                    select new
                    {
                        MemberId = transform.MemberId,
                        Name = transform.Name,
                        Hobbies = transform.Hobbies
                                           .Split( new[] { "," }, StringSplitOptions.RemoveEmptyEntries )
                                           .Select( item => Convert.ToInt32( item ) )
                                           .ToList( )

                    }
                )
             from hobby in HobbiesMst
             where record.Hobbies.Contains( hobby.HobbyId )
             select new 
             {
                record.MemberId,
                record.Name,
                hobby.Title
             };

可悲的是,我不确定这是否有效。但是您可以尝试在客户端而不是 sql-server 上转换您的 csv 字段。

内部查询将首先执行并将表中的每条记录加载到您的客户端。然后它会尝试将您的 csv 字段转换为一个List<int>值(当数据无法转换时,它甚至会引发异常)。然后它对HobbiesMst表执行连接。总而言之不是一个很好的解决方案。

我会推荐一个多对多关系表(比如 Karamafrooz)。

于 2013-01-12T12:30:03.807 回答