【问题标题】:Linq select subgroupLinq 选择子组
【发布时间】:2011-03-28 21:22:02
【问题描述】:

我的数据库表中有以下内容:

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

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

  • 1) (服务),ID 为 3,5,8 (serviceId)。
  • 2) 和邮件组的复选框列表(组 1、组 2、组 3)

我需要使用 LINQ 选择以下内容:

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

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

【问题讨论】:

    标签: linq entity-framework


    【解决方案1】:

    这 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;
    }
    

    【讨论】:

    • 这会选择所有邮件组,即使我没有检查 group1。如果从邮件组的复选框列表中选择了 group1,它应该只对 serviceId 进行匹配。谢谢
    【解决方案2】:

    试试这样的。

    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
        };
    

    【讨论】:

    • 不。这只会选择带有 serviceId 的行。我需要它来选择任何带有服务 ID 的行(如果有的话)加上没有在“邮件组”复选框组中检查的服务 ID 的行。
    【解决方案3】:

    这是一个 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/

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多