实体框架多对多选择

时间:2014-03-13 12:17:33

标签: c# sql entity-framework many-to-many

我有3张桌子可供多对多关系使用。

MailLists => MailListInGroups< = MailGroups

和MailListInGroups一样,如下表所示;

MLID    MGID

2          1

2          3

3          2

3          3

4          1

4          4

5          1

5          5

6          2

6          5

7          2

7          3

下面的我的邮件组表;

MGID

1   Türkiye

2   İtalya

3   Çok İyi

4   İyi

5   Orta

以及下面的我的邮件列表;

MLID

2   xxx@hotmail.com NULL    NULL

3   yyy@hotmail.com NULL    NULL

4   zzz@hotmail.com NULL    NULL

5   ppp@hotmail.com NULL    NULL

6   trp@deneme.com  NULL    NULL

7   zzz@hotmail.com NULL    NULL

我需要只获取2和3的MailGroupID。我的行动如下;

例如int[] ints= 2,3

public ActionResult SelectGroup(int[] ints)
{
    var mails = new List<MailList>();
    var groups = ints.Select(item => _bb.MailGroups.Include("MailLists").Where(m => m.MailGroupID == item)).ToList();                      
}

组选择所有包含MailGroupID的2行和3行。(MLID = 2,3,6,7)。但我只需要2行。(MLID = 3,7)如何只选择2个MLID?

1 个答案:

答案 0 :(得分:0)

试试这个

public ActionResult SelectGroup(int[] ints)
{     
   var listToFilter = new HashSet<int>(ints);       
   var list = _bb.MailGroups.Where(m => listToFilter.Contains(m.ID))
                            .SelectMany(m => m.MailLists);
}

更新:

我认为你需要改变你的方法:

public ActionResult SelectGroup(int[] mailGroupIds, int[] mailListIds)
{          
   var list = _bb.MailGroups.Where(m => mailGroupIds.Contains(m.ID))
                            .SelectMany(m => m.MailLists)
                            .Where(l => mailListIds.Contains(l.ID));
}