sql server语言 - LINQ TO sql查询,将csv字段匹配到另一个表字段



我有以下表格

**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中的

嗜好是来自HobbiesMst的值。现在我想知道HobbiesMst成员的爱好。使用linq查询。我尝试了Split, Contains, 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

如果您希望在两个表之间建立多对多关系,则应该创建第三个表来处理该关系。在您的例子中,模式应该是这样的:

    MemberMst                 Member_Hobbie                 HobbiesMst
MemberId   Name           Id   MemberId   HobbiId         HobbyId   Title

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

你可以试试这个。

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)。

听起来你是在正确的轨道上,下面应该编译…

var query = MemberMst.SelectMany(
                mem => HobbyMst.Where(hob => mem.Contains(hob.HobbyId)),
                (mem,hob) => new 
                {
                 MemberId = mem.MemberId, 
                 Name = mem.Name, 
                 Title = hob.Title
                })

相关内容

  • 没有找到相关文章

最新更新