从c#linq获得与SQL语句相同的结果

时间:2014-07-29 10:35:13

标签: c# sql linq

我正在试图弄清楚如何从获得多个通知的关系中获取所有通知,因为我想将这些通知组合到1个通知中,因此关系只会获得1个电子邮件而不是多个。

我创建了以下SQL语句,据我所知,我想要的是:

select distinct r.Notificatie
       , r.RelatieNr
  FROM [configuratie].[dbo].[NotificatieRecID] r
  join [configuratie].[dbo].[Notificatie] n on r.Notificatie = n.ID
  where n.Verzonden = 0
  and r.RelatieNr in(select RelatieNr from [configuratie].[dbo].[NotificatieRecID]
                       group by RelatieNr having count(*) > 1)
                       order by r.RelatieNr

返回以下内容

Notification                            Relation
3A2A53B9-D92A-4504-874D-5A901AD01041    114147
4C499F6C-53C8-49E0-B529-8B045819BE10    114147
AF4ED8CB-D033-47A4-96AE-F379BB484532    114147
977885C5-4C12-431B-AB72-59383B1824C6    303327
3A2A53B9-D92A-4504-874D-5A901AD01041    303327
4C499F6C-53C8-49E0-B529-8B045819BE10    303327
AF4ED8CB-D033-47A4-96AE-F379BB484532    303327

稍后在我的c#代码中,我将从不同的通知中获取所有值并简单地将它们组合起来但首先我需要以一种我可以在c#中使用linq的方式编写此SQL语句。 我不知道如何做SELECT DISTINCTand r.RelatieNr ingroup by RelatieNr having count(*) > 1

有人能为我提供一个例子吗? (它不一定是1个linq语句,我有点认为这是不可能的,虽然我想要一点点临时列表/ Iqueriables,因为表格很大)

1 个答案:

答案 0 :(得分:1)

您可以使用以下

 var details= (from r in NotificatieRecID
              join n in Notificatie on r.Notificatie=n.ID
              where n.Verzonden=0 &&
              (from t in NotificatieRecID
               group t by t.RelatieNr into grp
               where grp.Count()>1
               select grp.Key).Contains(r.relatieNr)
              select new {
                 Notificate=r.Notificatie,
                 RelatieNr=r.RelatieNr
  }).Distinct();