Я сделал запрос FetchXML, который возвращает данные из моей сетки CRM2013. Данные передаются в список, который затем преобразуется в файл CSV с помощью следующего кода;

EntityCollection result = service.RetrieveMultiple(new FetchExpression(fetchxml)); foreach (var c in result.Entities)
                {
                    if (result != null && result.Entities.Count > 0)
                    {
                        List<string> _product = new List<string>();
                        foreach (Entity _entity in result.Entities)
                        {
                           _product.Add(((EntityReference)c.Attributes["productid"]).Name.ToString());

                           _product.Add(_entity.Attributes["quantity"].ToString());  

                        }

                        CSVFile = string.Join(",", _product.ToArray());



                        string AddressPath = "FM-OR" + "_";
                        string AddressSavePath = @"\\fm\CRMdata\maesteg\" + AddressPath + ".csv";
                        System.IO.File.WriteAllText(AddressSavePath, CSVFile.ToString());

Результат будет следующим

ProductExample1, 1.0, ProductExample2, 4.0, ProductExample3, 2.0

Я хочу, чтобы результат был

ProductExample1, 1.0

ProductExample2, 4.0

ProductExample3, 2.0

Любые предложения о том, как я этого достигну?

Благодарность

Обновить

Мне не показалось, что я объяснил это правильно. Я хочу, чтобы выходные данные были отдельными строками, чтобы я мог выводить разные CSV-файлы для каждого продукта + количество в списке. Спасибо.

Обновить

Реализован код с новыми предложениями, ошибка описана в комментарии ниже

EntityCollection result = service.RetrieveMultiple(new FetchExpression(fetchxml)); foreach (var c in result.Entities)
            {
                if (result != null && result.Entities.Count > 0)
                {
                    List<string> _product = new List<string>();
                    foreach (Entity _entity in result.Entities)
                    {
                        string productid = (((EntityReference)_entity.Attributes["productid"]).Name.ToString());

                        string quantity = _entity.Attributes["quantity"].ToString();

                        CSVFile = productid + "," + quantity;

                        int n =1;
                        string AddressPath = "FM-OR" + "_" +actualID + "_" + n;
                        string AddressSavePath = @"\\fm\CRMdata\maesteg\" + AddressPath + ".csv";
                        System.IO.File.WriteAllText(AddressSavePath, CSVFile.ToString());
                        n++;

                    }                                        

                }

            }

Благодарность

0
Sjharrison 3 Июл 2014 в 15:58

2 ответа

Лучший ответ

Насколько я понимаю ваш вопрос, это может вам помочь. CSVFILE теперь представляет собой строку, содержащую продукт и количество, разделенные знаком "," которую вы можете записать в свой файл.

EntityCollection result = service.RetrieveMultiple(new FetchExpression(fetchxml));  
if (result != null && result.Entities.Count > 0)
{
    List<string> _products = new List<string>();
    foreach (Entity _entity in result.Entities)
    {
        string productid = (EntityReference)c.Attributes["productid"]).Name.ToString();
        string quantity = _entity.Attributes["quantity"].ToString();

        CSVFILE = productid + "," + quantity;

        //Write CSVFILE
        //...
    }
}
0
CDirkx 3 Июл 2014 в 14:02

А как насчет такого метода расширения?

public static IEnumerable<string> JoinEverySecond(this IList<string> list)
{
    if (list == null)
    {
        throw new ArgumentNullException("list");
    }


    for (var i = 0; i < list.Count; i += 2)
    {
        if (i + 1 >= list.Count)
        {
            yield return list[i];
        }

        yield return string.Join(",", list[i], list[i + 1]);
    }
}

Warn: не тестировал, но я просто хотел представить идею.

0
3 Июл 2014 в 12:30