FetchXML 过滤掉重复值

FetchXML Filter out Duplicate Values

我有一个程序可以将发票从我们的 CRM Dynamics Online 系统提取到 .csv 文件中。

有时我们的销售人员会在 CRM 中的同一个订单上创建多张发票,我需要一种方法来删除 .csv 上的所有重复发票。

我只想提取具有不同订单号的发票。这将如何实现?我整个上午都在使用 distincts 无济于事。

我的代码:

private EntityCollection GetInvoices(Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy crmService)
    {
        string fx = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>
                <entity name='invoice'>
                    <attribute name='invoiceid' alias='InvoiceId' />
                    <attribute name='customerid' alias='ShipTO' />
                    <attribute name='shipto_postalcode' alias='ShipZip' />
                    <attribute name='shipto_line2' alias='ShipAddr2' />
                    <attribute name='shipto_line1' alias='ShipAddr1' />
                    <attribute name='shipto_stateorprovince' alias='ShipState' />
                    <attribute name='shipto_country' alias='ShipCountry' />
                    <attribute name='shipto_city' alias='ShipCity' />
                    <attribute name='neu_customerponumber' alias='PO' />
                    <attribute name='paymenttermscode' alias='Terms' />
                    <attribute name='createdon' alias='ShipDate'/>
                    <attribute name='ordernumber' alias='InvoiceNo' />
                            ";
        fx += GetInvoiceFilter();
        fx += @"
                    <link-entity name='salesorder' from='salesorderid' to='salesorderid' visible='false' link-type='outer' alias='order1'>
                        <attribute name='datefulfilled' alias='FirstOfShippingDate' />
                        <link-entity name='systemuser' from='systemuserid' to='ownerid' visible='false' link-type='outer' alias='systemuser1'>
                            <attribute name='fullname' alias='SalesRep' />
                        </link-entity>
                    </link-entity>
                    <link-entity name='invoicedetail' from='invoiceid' to='invoiceid' visible='false' link-type='outer' alias='invoicedetail1'>
                        <attribute name='neu_percentdiscount' alias='Discount' />
                        <attribute name='invoicedetailid' alias='InvoiceDetailId' />
                        <attribute name='baseamount' alias='Amount' />
                        <attribute name='extendedamount' alias='Sales' />
                        <link-entity name='product' from='productid' to='productid' visible='false' link-type='outer' alias='product1'>
                            <attribute name='neu_division' alias='Division' />
                            <attribute name='producttypecode' alias='Desc' />
                            <attribute name='productnumber' alias='CatalogNumber' />
                        </link-entity>
                    </link-entity>
                    <link-entity name='account' alias='account1' to='customerid' from='accountid'> 
                         <attribute name='accountnumber' alias='CustID' /> 
                    </link-entity>
                </entity>
                </fetch>";

        return crmService.RetrieveMultiple(new FetchExpression(fx));


    }



    private string GetInvoiceFilter()
    {
        string fetchFilter = "";

        fetchFilter = @"<filter type='and'>";

        if (txtOrderName.Text.Length > 0)
        {
            fetchFilter += @"<condition attribute='ordernumber' operator='eq' value='";
            fetchFilter += txtOrderName.Text;
            fetchFilter += "' />";
        }
        else
        {
            fetchFilter += @"<condition attribute='statuscode' operator='eq' value='1' />";               
            fetchFilter += @"<condition attribute='neu_exportedtopeachtree' operator='null' />";
            fetchFilter += @"<condition attribute='createdon' operator='on-or-after' value='";
            fetchFilter += dtpFrom.Text;
            fetchFilter += "' />";
            fetchFilter += " <condition attribute='createdon' operator='on-or-before' value='";
            fetchFilter += dtpTo.Text;
            fetchFilter += "' />";
        }

        fetchFilter += @"</filter>";

        return fetchFilter;
    }

fetch 语句中的 distinct 子句仅过滤掉返回结果集中的重复 ID。要根据订单号过滤我们的骗子,您必须在结果返回后以编程方式执行此操作。