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
C# 如何为每个组织只返回一个联系人?_C#_Linq_Dynamics Crm 2011 - Fatal编程技术网

C# 如何为每个组织只返回一个联系人?

C# 如何为每个组织只返回一个联系人?,c#,linq,dynamics-crm-2011,C#,Linq,Dynamics Crm 2011,我必须只返回作为成员的个人帐户中的主要联系人,但我的查询将返回组织中的所有成员。我尝试过重新排序它,并使用类似Single()的东西,但没有成功。我需要一种方法来放置where子句,该子句表示我只希望与帐户进行主要联系 if ((!string.IsNullOrEmpty(organization)) && (!string.IsNullOrEmpty(city)) && state != null) { var corpo

我必须只返回作为成员的个人帐户中的主要联系人,但我的查询将返回组织中的所有成员。我尝试过重新排序它,并使用类似Single()的东西,但没有成功。我需要一种方法来放置where子句,该子句表示我只希望与帐户进行主要联系

if ((!string.IsNullOrEmpty(organization)) && (!string.IsNullOrEmpty(city)) && state != null)
        {
            var corporatemembers = (from a in crmContext.bpt_membertypeSet
                                    where a.bpt_membertypename == "Member (Individual)" || a.bpt_membertypename == "Courtesy"
                                    || a.bpt_membertypename == "Affiliate" || a.bpt_membertypename == "Member"
                                    select new { a.Id }).ToList();

            foreach (var corporatemember in corporatemembers)
            {
                var directories = (from b in crmContext.AccountSet
                                   join a in crmContext.ContactSet
                                   on b.Id equals a.ParentCustomerId.Id
                                   where a.bpt_MemberTypeId.Id == corporatemember.Id
                                   where a.bpt_memberstatus == (int)bpt_memberstatus.Active
                                   where b.Name.Contains(organization)
                                   where a.Address1_City.Contains(city)
                                   where a.bpt_stateorusterritory.Value == state.Value
                                   select new { b.PrimaryContactId, b.EMailAddress1, a.Address1_City, b.Name, b.WebSiteURL, a.bpt_stateorusterritory }).ToList();

                foreach (var directory in directories.ToList().OrderBy(o => o.Name))
                {
                    var cityState = String.Empty;
                    if (directory.bpt_stateorusterritory != null)
                        cityState = directory.Address1_City + ", " + Utility.GetOptionSetValueLabel(crmContext, new Microsoft.Xrm.Sdk.Entity(Xrm.Contact.EntityLogicalName), "bpt_stateorusterritory", new Microsoft.Xrm.Sdk.OptionSetValue(directory.bpt_stateorusterritory.Value));
                    else
                        cityState = directory.Address1_City;
                    oMemberList.Add(new Members { FullName = directory.PrimaryContactId, FullNameEmail = directory.EMailAddress1, OrganizationName = directory.Name, OrganizationUrl = directory.WebSiteURL, CityState = cityState });
                }

            }
        }
如果搜索类别都已填充,则此代码返回all。我有4个条款适用于所有情况。但在整件事结束时,我有:

oMembers.ToList()
谢谢


编辑:这里是示例数据,但输出错误。应该只有一个组织和一个联系人

我认为您使用的加入字段不正确。这将返回属于该帐户的所有联系人-这可能就是您获得多个结果的原因

b.Id上的
等于a.ParentCustomerId.Id


帐户上的主要联系人字段是
primarycontactid
,因此我建议您更新查询以引用该属性。

如果您显示一些示例数据和预期结果,将更容易提供帮助output@GiladGreen我把一张样本图片放上去,我在b.PrimaryContactId.Id等于a.Id上完成了工作,谢谢指出我需要primarycontactid