title: CRM 2011 GROUP and COUNT
body: <p>I am trying to GROUP the CRM records that have the same "Owner" name and also get a count of the records for each GROUP. So I have a DLL that runs on a schedule and pulls the info down from CRM 2011. But I can't seem to get it to group and do a count of the records for each group. For example all the records with the Owner of "Bob" will say Bob you have X records. And any records with the Owner of "Ted" would say Ted you have X records, etc. For every owner there is. Any idea how to do this? This is what I have so far:</p>
  
  <pre><code>              var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity")
                               join c in orgServiceContext.CreateQuery("systemuser") on ((EntityReference)r["ownerid"]).Id equals c["systemuserid"] into opp
                               from o in opp.DefaultIfEmpty()
                               //where ((OptionSetValue)r["new_leadstatus"]).Equals("100000002")
                               select new
  
                               {
                                   OpportunityId = !r.Contains("opportunityid") ? string.Empty : r["opportunityid"],
                                   CustomerId = !r.Contains("customerid") ? string.Empty : ((EntityReference)r["customerid"]).Name,
                                   Priority = !r.Contains("opportunityratingcode") ? string.Empty : r.FormattedValues["opportunityratingcode"],
                                   ContactName = !r.Contains("new_contact") ? string.Empty : ((EntityReference)r["new_contact"]).Name,
                                   Source = !r.Contains("new_source") ? string.Empty : ((String)r["new_source"]),
                                   CreatedOn = !r.Contains("createdon") ? string.Empty : ((DateTime)r["createdon"]).ToShortDateString(),
                                   Eval = !r.Contains("new_distributorevaluation") || ((OptionSetValue)r["new_distributorevaluation"]).Value.ToString() == "100000000" ? "NA" : r.FormattedValues["new_distributorevaluation"].Substring(0, 2),
                                   EvalVal = !r.Contains("new_distributorevaluation") ? "100000000" : ((OptionSetValue)r["new_distributorevaluation"]).Value.ToString(),
                                   DistributorName = !r.Contains("new_channelpartner") ? string.Empty : ((EntityReference)r["new_channelpartner"]).Name,
                                   Notes = !r.Contains("new_distributornotes") ? string.Empty : r["new_distributornotes"],
                                   EstimatedCloseDate = !r.Contains("estimatedclosedate") ? string.Empty : r["estimatedclosedate"],
                                   MaturityValue = !r.Contains("estimatedvalue") ? string.Empty : ((Money)r["estimatedvalue"]).Value.ToString(),
                                   SentToDistributorOn = !r.Contains("new_senttodistributoron") ? DateTime.MinValue.ToShortDateString() : ((DateTime)r["new_senttodistributoron"]).ToShortDateString(),
                                   LeadStatus = !r.Contains("new_leadstatus") ? string.Empty : ((OptionSetValue)r["new_leadstatus"]).Value.ToString(),
                                   EmailedToRSM = !r.Contains("new_emailedtorsm") ? string.Empty : r.FormattedValues["new_emailedtorsm"],
                                   EmailedToDistributor = !r.Contains("new_emailedtodistributor") ? string.Empty : r.FormattedValues["new_emailedtodistributor"],
                                   Owner = !r.Contains("ownerid") ? string.Empty : ((EntityReference)r["ownerid"]).Name,
                                   OwnerEmail = !o.Contains("internalemailaddress") ? string.Empty : ((String)o["internalemailaddress"]),
                               }).ToArray();
  
              foreach (var distributor in linqQuery)
              {
  
  
  
                  DateTime dtCreatedOn = Convert.ToDateTime(distributor.CreatedOn);
                  DateTime dtSentOn = Convert.ToDateTime(distributor.SentToDistributorOn);
  
                  // New Lead Notification
                      if (((distributor.Owner.ToString() == distributor.Owner.ToString()) &amp;&amp; (DateTime.Now - dtCreatedOn).Days &lt;= 1) &amp;&amp; (distributor.LeadStatus == "100000000") &amp;&amp; ((distributor.EmailedToRSM == "No") || (distributor.EmailedToRSM == null)) &amp;&amp; (String.IsNullOrEmpty(distributor.Owner.ToString()) == false))
                      {
  
                          int count = 0;
                          count = count + 1;
                          string lBodyHTML = "";
  
                          lBodyHTML = "You have " + distributor.CustomerId.ToString() + " " + distributor.CreatedOn.ToString() + " " + count.ToString() + " new leads. Please review them for follow up or assignment.";
  
                          string smtpServer = Convert.ToString(Globals.HostSettings["SMTPServer"]);
                          string smtpAuthentication = Convert.ToString(Globals.HostSettings["SMTPAuthentication"]);
                          string smtpUsername = Convert.ToString(Globals.HostSettings["SMTPUsername"]);
                          string smtpPassword = Convert.ToString(Globals.HostSettings["SMTPPassword"]);
                          string xResult = Mail.SendMail("email@email.com", "email@email.com", "", "", MailPriority.High, "You have X new leads", MailFormat.Html, System.Text.Encoding.UTF8, lBodyHTML, "", smtpServer, smtpAuthentication, smtpUsername, smtpPassword);
  
                      }
  </code></pre>
  
  <p>Any help would be awesome. I'm stuck right now.</p>
  
  <p>Thanks!</p>