2010-10-25 23 views
0

je l'expression LINQ suivante qui me permet de joindre deux tables, les regrouper par un DSCID, puis obtenir un nombre de valeurs groupées:Linq rejoindre, groupe, comptent où compte plus que la valeur

var qryGeoApppendCount = 
       from a in append 
       join g in geo 
       on a.Field<string>("RNO") 
       equals g.Field<string>("RNO") 
       group g by g.Field<int>("DSCID") into appendGeo 
       select new 
       { 
       DscId = appendGeo.Key, 
       DscIdCount = appendGeo.Count() 
       }; 

Je dois prendre ce juste un peu plus loin en sélectionnant uniquement les chefs d'accusation supérieur à 1. J'ai essayé quelque chose comme ceci:

select new 
{ 
    DscId = appendGeo.Key, 
    DscIdCount = appendGeo.Count(n => n.Count > 1) 
}; 

mais cela n'a pas fonctionné. Je dois être capable de lancer une erreur chaque fois que qryGeoAppendQuery renvoie des enregistrements avec des nombres> 1, donc idéalement la requête serait enveloppée dans une instruction if.

Répondre

2
var qryGeoApppendCount = 
       (from a in append 
       join g in geo 
       on a.Field<string>("RNO") 
       equals g.Field<string>("RNO") 
       group g by g.Field<int>("DSCID") into appendGeo 
       select new 
       { 
       DscId = appendGeo.Key, 
       DscIdCount = appendGeo.Count() 
       }) 
       .Where(a => a.DscIdCount > 1); 
1

Ne pourriez-vous le faire ...

select new 
{ 
    DscId = appendGeo.Key, 
    DscIdCount = appendGeo.Where(n => n.Count > 1).Count() 
}; 

ou si vous voulez juste savoir s'il existe une ...

select new 
{ 
    DscId = appendGeo.Key, 
    ThrowException = appendGeo.Any(n => n.Count > 1) 
}; 
0
var qryGeoApppendCount = 
      from a in append 
      join g in geo 
      on a.Field<string>("RNO") 
      equals g.Field<string>("RNO") 
      group g by g.Field<int>("DSCID") into appendGeo 
      where appendGeo.Count() > 1 
      select new 
      { 
      DscId = appendGeo.Key, 
      DscIdCount = appendGeo.Count() 
      }; 

Impossible vous ajoutez une clause where avant le select? Cela a fonctionné dans mon exemple mais je ne suis pas sûr sans voir les données.

+0

J'espérais compter où duplications des DSCID se produisent dans la table jointe, non seulement si la table jointe avait un nombre d'enregistrements supérieur à 1. Merci beaucoup si pour la réponse. – jrubengb

0
"SELECT [SubsNumber], sum([Usage_MB])/1024 as GB FROM [VASCDR].[dbo].[nrmSubsDailyMBUsage] where SubsNumber ='" + textBox1.Text.Trim() + "'" group by [SubsNumber] ; 

est de savoir comment faire en utilisant C#