2011-03-28 47 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/