LINQ检查组中的所有记录

LINQ检查组中的所有记录,linq,dynamics-crm,dynamics-crm-2011,Linq,Dynamics Crm,Dynamics Crm 2011,我从linqQuery2查询linqQuery,因为LinqToCRM不支持GroupBy。下面的代码可以工作,但它只检查找到的第一条记录。是否有类似First()的东西,但检查所有记录,而不仅仅是第一条记录 var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity") select new { OpportunityId = !r.Contains("opportunityid") ? s

我从linqQuery2查询linqQuery,因为LinqToCRM不支持GroupBy。下面的代码可以工作,但它只检查找到的第一条记录。是否有类似First()的东西,但检查所有记录,而不仅仅是第一条记录

var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity")
select new
    {
        OpportunityId = !r.Contains("opportunityid") ? string.Empty : r["opportunityid"],
        CustomerId = !r.Contains("customerid") ? string.Empty : ((EntityReference)r["customerid"]).Name,
        OwnerId = !r.Contains("ownerid") ? string.Empty : ((EntityReference)r["ownerid"]).Id.ToString(),
        OwnerName = !r.Contains("ownerid") ? string.Empty : ((EntityReference)r["ownerid"]).Name.ToString(),
        EmailedToRSM = !r.Contains("new_emailedtorsm") ? false : ((Boolean)r["new_emailedtorsm"]),
        LeadStatus = !r.Contains("new_leadstatus") ? "100000000" : ((OptionSetValue)r["new_leadstatus"]).Value.ToString(),
    });

var linqQuery2 = (from f in linqQuery.ToList()
group f by f.OwnerId into myGroup
    select new
        {
            OwnerName = myGroup.First().OwnerName,
            OwnerId = myGroup.First().OwnerId,
            LeadStatus = myGroup.First().LeadStatus.ToString(),
            EmailedToRSM = myGroup.First().EmailedToRSM,
            OrderCount = myGroup.Count()
        });

foreach (var c in linqQuery2)
{

        if (c.LeadStatus.ToString() == "100000000")
            {

            //Count records that have a Lead Status of 100000000

            }
}

谢谢

不清楚为什么要使用
First()
作为开头。那么:

var grouped = linqQuery.GroupBy(f => f.OwnerId).ToList();
现在,“分组”中的每个条目都是一个分组。您现在可以使用:

foreach (var group in grouped)
{
    Console.WriteLine("OwnerId: {0}", group.Key);
    int leadCount = group.Count(c => c.LeadStatus == 100000000);
    // etc - do what whatever else you want with the group

    // Let's dump all the customer IDs...
    foreach (var entry in group)
    {
        Console.WriteLine(entry.CustomerID);
    }
}

听起来您想使用
myGroup
中的所有项目。通过调用
First()

您可以按如下方式编写查询:

var query = from f in linqQuery.ToList()
            group f by f.OwnerId into myGroup
            from item in myGroup
            select new
            {
                OwnerName = item.OwnerName,
                OwnerId = item.OwnerId,
                LeadStatus = item.LeadStatus.ToString(),
                EmailedToRSM = item.EmailedToRSM,
                OrderCount = myGroup.Count()
            };

但是,请注意,这样做会使结果变得平坦。

这里很难看到树的木材,因为格式不好,涉及大量属性。你能用一个简单的例子来表达同样的问题吗?对不起,Jon,重新格式化并缩短了。谢谢你的帮助。a如何从linqQuery获取其他变量。所以在foreach中,我还想显示CustomerId、EmailedToRSM、Owner等。这可能吗?谢谢@贾斯汀:完全一样。在每个组中,都有具有相同所有者ID的所有项目(我已经添加了一个示例,在我的答案中转储所有客户ID。)太棒了!在foreach循环中,我想为计数中的每个组发送一封电子邮件。我现在正在这样做,但它会为每条记录发送一封电子邮件。有没有办法让每个小组只发送一封电子邮件?谢谢@贾斯汀:听起来你是在内部foreach循环中发送邮件;如果您希望每组发送一封邮件,则应在外部循环中执行。最后一个问题对不起!LINQ和CRM的新成员。如何将Where子句添加到此“var grouped=linqQuery.GroupBy(f=>f.OwnerId.ToList();”