На System.Xml.Linq нельзя правильно ссылаться в редакторе WEALTHLAB

Я пытаюсь написать код C#, который делает в основном следующее:

  • Код соединяется с таблицей MySql и считывает данные из одной таблицы MySql (с r строками и c столбцами) - здесь нет проблем, все в порядке;

  • Затем код определяет и загружает один DataTable с помощью MySqlDataReader - опять же, никаких проблем на этом этапе. Код в порядке;

  • Каждый столбец этой таблицы данных фактически является одним стратегическим параметром стратегии (т.е. каждая строка этой таблицы данных становится one parameter set of the strategy,

Было сказано, что:

  • затем код перебирает все строки этой таблицы данных;

  • код получает значения столбцов каждой строки по одному и изменяет элементы XML по одному, чтобы заменить старые значения стратегии новыми - ЭТО ТАМ, ГДЕ Я ПОЛУЧИЛ ОШИБКУ!!! Я не могу изменить XML-файл изнутри редактора WEALTHLAB C#!!

  • таким образом, стратегия каждый раз настраивается с новым набором параметров;

  • Затем код вызывает runDonor и запускает стратегию с заданным (новым) набором параметров - также нет проблем при вызове runDonor!;

  • и, наконец, некоторая статистика записывается и вставляется в одну таблицу MySql - здесь также нет проблем;

**

Учитывая, что большая часть этого кода не связана с пространством имен wealthlab, я сначала кодировал большинство частей в Visual Studio, скомпилировал их с помощью компилятора Visual Studio и увидел, что код там работает очень хорошо! (То есть редактирование Xelement прошло нормально. Я мог видеть, что файл XML изменяется после каждого цикла, когда этот код запускается в Visual Studio!)

Затем я скопировал / вставил этот код в редактор richscript, но, к сожалению, код не скомпилировался!!

**

Проблема в том регионе, где я начинаю изменять документ XML, используя метод ElementAt.

В частности, оператор ElementAt отлично работает в редакторе Visual Studio, тогда как в редакторе Wealthlab - нет.

Повторяю, несмотря на факт, что я даю ссылку на одни и те же библиотеки DLL и используйте то же самое USING... ЗАЯВЛЕНИЯ НА ВЕРХЕ КОДА Visual Studio не возвращает ошибок и работает полностью, тогда как Wealthlab возвращает эту ошибку:

'System.Collections.Generic.IEnumerable' <System.Xml.Linq> does not contain a definition for 'ElementAt' 
and no extension method 'ElementAt' accepting a first argument of type
'System.Collections.Generic.IEnumerable' <System.Xml.Linq> could be found (are you
missing a using directive or an assembly reference?)"

Я гуглил целую вечность и пока не смог найти приличного решения.

И поскольку у меня нет опыта программирования, я действительно не могу понять, почему тот же код, который использует те же ссылки и те же директивы с использованием, работает в Visual Studio, но приводит к ошибкам в Wealthlab.

По этой ссылке один вариант решения обещан, но, честно говоря, он не является английским для меня: System.Xml.Linq.XElement> 'не содержит определения для'First'и не имеет метода расширения'First', принимающего первый аргумент

**

Итак, мой вопрос будет в два раза:

1- Как я могу преодолеть эту интересную ошибку, которая связана с правильной ссылкой на System.Xml.Linq? Очевидно, в этом и заключается проблема.

2- Или давайте выбросим это и начнем с нуля: как вы, ребята, модифицируете свои xmls? Было бы замечательно, если бы мне предоставили ссылку с примерами кодов, которые читают из XML-файлов или изменяют их, сохраняют их.

(Пожалуйста помоги...)

Ребята, чтобы вы повторили ту же ошибку, я также приложил сюда весь код; скопируйте это в ваши редакторы и посмотрите, хорошо ли работает код:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using Community.Components;
using System.Collections;
using System.Xml;
using System.Xml.XPath;
using System.Linq;
using System.IO;
using System.Data;
using System.Xml.Linq; // THIS IS WHERE THE PROBLEM IS THIS REFERENCE COULD NOT BE SET PROPERLY!! WHY?!! 
using MySql.Data.MySqlClient;

namespace WealthLab.Strategies
{
    public class MyStrategy : WealthScript
    {
        // public DateTime now;
        public static XElement SourceXml;
        public static XElement DonorStrategyXml;
        public static string SourceXmlName;
        public static string Ticker;

        public static int nNames;

        public string DonorStrategyXmlFolder;
        public string DonorStrategyXmlName;
        public string DonorStrategyXmlNameWithNoXml;
        public string DonorStrategyXmlPathName;

        protected override void Execute()
        {
            //....

            //....

            //....

            DonorStrategyXmlFolder = @"C:\Users\Aykut\AppData\Roaming\Fidelity Investments\WealthLabDev\1.0.0.0\Data\Strategies\Customized\";  
            DonorStrategyXmlName = "sss.xml";
            DonorStrategyXmlNameWithNoXml = "sss";

            string DonorStrategyXmlPathName = DonorStrategyXmlFolder + DonorStrategyXmlName;
            DonorStrategyXml = XElement.Load(DonorStrategyXmlPathName);



            foreach (DataRow dbBandParameterRow in dbBandParameters.Rows) {
                foreach (DataRow dbNNParameterRow in dbNNParameters.Rows) {
                    string ResultID = dbBandParameterRow["ResultID"].ToString();


                    int nE = 0;
                     //....

                    //....

                    //.THIS IS WHERE THE PROBLEM LIES AT!!...

DonorStrategyXml.Elements("ParameterValues").Descendants("double").ElementAt(nE).Value = dbBandParameterRow["RatioForUpper"].ToString();
                    nE++;
DonorStrategyXml.Elements("ParameterValues").Descendants("double").ElementAt(nE).Value = dbBandParameterRow["ADXPeriodForUpper"].ToString();

                    // output certain statistics of the strategy onto mysql // later!!!
                    //....

                    //....

                    PrintDebug("NetProfit:" + sp.Results.NetProfit.ToString());
                }
            }

        }

    } // class
} // nspace

1 ответ

Команда поддержки wealthlab вернулась со следующим ответом; и это сработало.

Благодарю.

...

код не скомпилируется в текущей версии 6.6 редактора Wealth-Lab. Чтобы это исправить, добавьте ссылки на System.Core.dll и System.Xml.Linq.dll из c:\windows\microsoft.net\framework64\v4.0.30319 (64-битный WLD или c:\windows\microsoft.net\framework\v4.0.30319 для 32-битного WLD).

...

Другие вопросы по тегам