Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在LINQ查询中使用组_Linq_Dynamics Crm_Dynamics Crm 2011 - Fatal编程技术网

在LINQ查询中使用组

在LINQ查询中使用组,linq,dynamics-crm,dynamics-crm-2011,Linq,Dynamics Crm,Dynamics Crm 2011,我正在使用LINQ to CRM提供商 我正在查询信息,然后使用LINQ查询LINQ到CRM查询,这样我就可以使用GroupBy,因为LINQ到CRM提供商不支持它。这就是我目前所拥有的 var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity") join c in orgServiceContext.CreateQuery("contact") on ((EntityReference

我正在使用LINQ to CRM提供商

我正在查询信息,然后使用LINQ查询LINQ到CRM查询,这样我就可以使用GroupBy,因为LINQ到CRM提供商不支持它。这就是我目前所拥有的

var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity")
    join c in orgServiceContext.CreateQuery("contact") on 
        ((EntityReference)r["new_contact"]).Id equals c["contactid"] into opp
    from o in opp.DefaultIfEmpty()
    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(),
        Priority = !r.Contains("opportunityratingcode") 
            ? string.Empty : r.FormattedValues["opportunityratingcode"],
        ContactName = !r.Contains("new_contact") 
            ? string.Empty : ((EntityReference)r["new_contact"]).Name,
        // ...
        // other properties  
    });

var linqQuery2 = (from f in linqQuery.ToList()
                  group f by f.OwnerId into myGroup
                  select new
                  {
                      OrderCount = myGroup.Count()
                  });
但是我还希望能够从
linqQuery2
查询
linqQuery
中的其他变量

所以我想要的是:

var linqQuery2 = (from f in linqQuery.ToList()
                  group f by f.OwnerId into myGroup
                  select new
                  {
                      OwnerName = myGroup.OwnerName,
                      OrderCount = myGroup.Count()
                  });
var linqQuery2 = (from f in linqQuery.ToList()
    group f by f.OwnerId into myGroup
    select new
    {
        OwnerName = myGroup.First().OwnerName,
        OrderCount = myGroup.Count()
    });
这可能吗?

试试看

        var linqQuery2 = (from f in linqQuery.ToList()
                          group f by f.OwnerName
                          into myGroup
                          select new
                                     {
                                         OwnerName = myGroup.Key,
                                         OwnerCount = myGroup.Count()
                                     });
或者:

        var linqQuery2 = linqQuery.ToList()
            .GroupBy(f => f.OwnerName)
            .Select(myGroup => new
                                {
                                    OwnerName = myGroup.Key,
                                    OwnerCount = myGroup.Count()
                                });

假设组中所有项目的所有者名称相同,则可以执行以下操作:

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

如果要多次使用第一项,我建议您使用“let”操作符:

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

在使用此方法时,您需要确保多个所有者没有相同的名称。否则,您的分组将不正确。谢谢。不过,这不允许我从linqQuery中选择其他变量。谢谢,这似乎是可行的。如果我想从第一个查询中获取更多变量,比如“Notes”,我可以继续使用first()?当然可以,尽管每次调用first()或Count()都会导致对延迟的linq查询进行另一次计算。有关此问题的解决方案,请参阅“编辑”。是否有方法使其能够在组中搜索所有对象,而不仅仅是第一个值。比如说。它统计所有LeadShare变量的值为100000000。因此,如果我有10个拥有相同id的所有者,其中5个的LeadShare值为100000000,那么它给出了5个计数。现在,它似乎只是寻找第一个,如果它不匹配,它就会忽略其余的。谢谢也许最好为这个问题贴一个新问题。事实上,我还没有花很多时间在LINQ和CRM2011上。