首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理fetchxml结果数据?

如何处理fetchxml结果数据?
EN

Stack Overflow用户
提问于 2009-07-31 00:17:16
回答 5查看 10K关注 0票数 7

我避免使用fetchxml,因为在调用crmService.Fetch(fetchXml)之后,我不确定处理结果数据的最佳方式。在一些情况下,我使用了一个带有LINQ的XDocument来从这个数据结构中检索数据,例如:

代码语言:javascript
复制
XDocument resultset = XDocument.Parse(_service.Fetch(fetchXml));
if (resultset.Root == null || !resultset.Root.Elements("result").Any())
{
    return;
}
foreach (var displayItem in resultset.Root.Elements("result").Select(item => item.Element(displayAttributeName)).Distinct())
{
    if (displayItem!= null && displayItem.Value != null)
    {
        dropDownList.Items.Add(displayItem.Value);    
    }
}

处理fetchxml结果数据的最佳方式是什么,以便易于使用。诸如将这些记录传递到ASP.NET数据网格中的应用程序将非常有用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-31 01:35:34

出于这个原因,我通常会避免使用FetchXML。您可以使用RetrieveMultiple来获取强类型的BusinessEntity对象,并且基本上可以做同样的事情。

但是,如果您想使用FetchXML,此示例将涵盖您:

http://msdn.microsoft.com/en-us/library/ms914457.aspx

票数 1
EN

Stack Overflow用户

发布于 2009-08-11 11:35:24

我喜欢FetchXML的灵活性,因此我开发了以下函数,该函数返回一个数据表,用于绑定到网格和中继器等。

代码语言:javascript
复制
        /// <summary>
    /// Takes a CRM FetchXML query and returns a DataTable
    /// </summary>
    /// <param name="fetchXml">The FetchXML query</param>
    /// <param name="requiredFields">A array of columns you'd expect returned. This is required as if there is no data for a field/column CRM will not return it which could impact databinding</param>
    /// <returns>A datatable containing the results of the FetchXML</returns>
    public static DataTable FetchXML2DataTable(string fetchXml, string[] requiredFields)
    {
        CrmService tomService = new CrmService();
        tomService = CrmWebService;

        string result = tomService.Fetch(fetchXml);
        DataSet ds = new DataSet();

        System.IO.StringReader reader = new System.IO.StringReader(result);
        ds.ReadXml(reader);

        DataTable dt = ds.Tables[1];

        //check all required columns are present otherwise add them to make life easier for databinding at the top level
        //caused by CRM not returning fields if they contain no data
        foreach (string field in requiredFields)
        {   //Check for column names and nested tables
            if ((dt.Columns.IndexOf(field) < 0) && (dt.DataSet.Tables.IndexOf(field) <0))
            {                    
                //Add column to datatable even though it is empty for reason stated above
                dt.Columns.Add(new DataColumn(field));
            }
        }            

        return dt;
    }

requiredFields字符串数组之所以存在,是因为如果您的结果集不包含包含该列的数据,则不会返回该列,然而,出于绑定到数据网格等的确切原因,我可能需要该列。

CrmService是一个初始化the服务的单例类。

希望这对你有用。

票数 6
EN

Stack Overflow用户

发布于 2010-08-31 22:26:47

使用QueryExpression不能查询多对多实体,也不能一次从多个实体检索属性,因此必须使用FetchXML。

不幸的是LinqToCRM的codeplex项目已经过时了(一年没有新的版本,但它似乎是一个很好的实现,比微软的版本更好),因为crm的SDK的4.0.12版本包含了linq provider for dynamics crm,但我读到了一些关于这个新版本的文章,它不是很好,似乎是一个有很多限制(强制缓存等)的“糟糕的实现”。

我看到很多人使用LinqToXML和DataSet来引导FetchXML结果,但我不知道处理它的最好方法是什么。你觉得这个怎么样?

克里斯托夫·特雷维萨尼·查维。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1210075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档