Linq выберите подгруппу - PullRequest
0 голосов
/ 28 марта 2011

В моей таблице БД есть следующее:

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

На мой взгляд, у меня есть 2 группы флажков:

  • 1) (услуги) с идентификаторами 3,5,8 (serviceId).
  • 2) и список флажков для групп рассылки (group1, group2, group3)

Мне нужно выбрать следующее с помощью LINQ:

Выберите строки, которые я выбрал в списке флажков ServiceId, а также любые другие. Например, если я выберу ServiceId (3 и 5) и группу «Group3», то я получу строки MailingId: 1, 3 и 5. ОДНАКО, если я выберу ЛЮБУЮ услугу из (первая группа флажков) И НЕ выбираю » Group1 "из флажков почтовой группы, тогда строки с Group1 НЕ ДОЛЖНЫ быть в выводе.

Я использую EF4. Пожалуйста помоги. Спасибо

Ответы [ 3 ]

2 голосов
/ 28 марта 2011

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 голосов
/ 28 марта 2011

Это пункт Где нет?

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/

0 голосов
/ 28 марта 2011

Попробуйте что-то вроде этого.

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
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...