2011-03-28 51 views
0

我在db表如下:LINQ的选择分组

- MailingId | GroupName | ServiceId 
- 1  | group1 | 3 
- 2  | group1 | 5 
- 3  | group1 | 8 
- 4  | group2 | null 
- 5  | group3 | null 
... 

在我看来,我有2组复选框:

  • 1)(服务)与ID的3,5,8 (服务Id)。
  • 2)和邮件组(1组,第2组,第3组)

,我需要选择以下使用LINQ复选框列表:

选择行,我在SERVICEID复选框列表选择PLUS任何其他。例如,如果我检查ServiceId的(3和5)和组“Group3”,那么我的输出将是行MailingId:1,3和5.但是,如果我从(第一组复选框)中选择任何服务并且不要选择“ Group1“从邮件组复选框,然后Group1的行不应该在输出中。

我正在使用EF4。请帮忙。 谢谢

回答

2

的2个阵列将是从您的视图

int[] selectedservices = {3,5}; 
string[] selectedgroups = {"group3"}; 

using (Model model = new Model()) 
{ 
    bool b = selectedservices.Contains(1); 

      var mailinglists = from m in model.MalingSet 
           where selectedgroups.Contains(m.GroupName) 
           && ((m.ServiceId.HasValue && selectedservices.Contains(m.ServiceId.Value)) || m.ServiceId.HasValue == false) 
           select m.MailingId; 
} 
+0

这选择所有邮件组,即使我没有检查group1。它只应在serviceId上进行匹配,如果从复选框的邮件组列表中选择了group1。谢谢 – ShaneKm 2011-03-28 09:40:03

+0

这工作!非常感谢! – ShaneKm 2011-03-28 09:53:12

0

尝试类似这样的东西。

var mailingGroup = 
    from m in Mailings 
    where m.ServiceId != null // or whatever other condition 
    group m by m.GroupName into g 
    select new 
    { 
     groupName = g.Key, 
     mailings = g 
    }; 
+0

都能跟得上。这只会选择带有serviceId的行。我需要它选择任何具有服务标识的行(如果有选中的话)PLUS行,它们没有已在'mailing group'复选框组中选中的服务标识。 – ShaneKm 2011-03-28 09:19:51

0

张贴这是一个Where子句没有选择?

var a = new {m = 1, g = "group1", sid = 3}; 
var b = new {m = 2, g = "group1", sid = 5}; 
var c = new {m = 3, g = "group1", sid = 8}; 
var d = new {m = 4, g = "group2", sid = 0}; 
var e = new {m = 5, g = "group3", sid = 0}; 

var l = new List<dynamic>{a,b,c,d,e}; 

l.Where(it => (new ArrayList{3, 5}).Contains(it.sid) 
       || (new ArrayList{1, 5}).Contains(it.m)).Dump(); 

http://www.linqpad.net/