简体   繁体   中英

Linq Lambda expression convert to SSIS

I have some existing code that I need to convert to read in ssis c#.

string conRef = ""; 
manOrder = new List<ManOrder>(); 
order = manOrder.Where(w => w.Ref == vRef).ToList();

I believe this creates a list using the models in mvc (existing code).

How do I create this in ssis script task using c#.

I have created properties in a new class for manOrder .

Basically I need code to build an xml out of data from a database, (using hard coded values at the moment to test the theory.)

I get a error when trying to put this code in ssis script task:

public void Main()
{
    string namespace = @"x-schema:http://10.0.0.2/THst%20Web%20Service/Schema/Calls1_2.dtd";
    string vRef = "";
    bool naccount = false;
    List<Order> manOrder;
    int orderCount = 0;
    using (MemoryStream memStream = new MemoryStream())
    {
        XmlTextWriter xmlWrt = null;
        System.Xml.XmlDocument iDocument = new System.Xml.XmlDocument();
        xmlWrt = new XmlTextWriter(memStream, System.Text.Encoding.UTF8);

        ReadFromDatabase rd = new ReadFromDatabase();
        List<Man> manData = new List<Man>();
        List<ManOrder> manOrder = new List<ManOrder>();
        rd.GetManData(out manData, out manOrder);

        //Start the Document
        xmlWrt.WriteStartDocument();
        xmlWrt.WriteStartElement("", "Calls", namespace);

        foreach (Man man in manData)
        {
            vRef = man.conRef;

            xmlWrt.WriteStartElement("", "Call", namespace);
            xmlWrt.WriteElementString("CallRef", namespace, "");
            xmlWrt.WriteStartElement("", "Details", namespace);
            xmlWrt.WriteElementString("Condition", namespace, "EDITABLE"); //Database to be fed in here
            xmlWrt.WriteElementString("CallType", namespace, "COM"); //Database to be fed in here
            xmlWrt.WriteElementString("Select0", namespace, "D"); //Database to be fed in here
            xmlWrt.WriteElementString("Select1", namespace, ""); //Database to be fed in here
            xmlWrt.WriteElementString("Select2", namespace, ""); //Database to be fed in here
            xmlWrt.WriteElementString("Select3", namespace, ""); //Database to be fed in here
            xmlWrt.WriteEndElement(); //Details

            xmlWrt.WriteStartElement("", "Defaults", namespace);
            //Order Date Time
            xmlWrt.WriteStartElement("", "Default", namespace);
            xmlWrt.WriteElementString("Label", namespace, "ORDERTIME");
            xmlWrt.WriteElementString("Value", namespace, ""); 
            xmlWrt.WriteElementString("Iteration", namespace, "0");
            xmlWrt.WriteEndElement(); //Default

            //Warehouse
            xmlWrt.WriteStartElement("", "Default", namespace);
            xmlWrt.WriteElementString("Label", namespace, "WARE");
            xmlWrt.WriteElementString("Value", namespace, ""); 
            xmlWrt.WriteElementString("Iteration", namespace, "0");
            xmlWrt.WriteEndElement(); //Default

            //Van Route
            xmlWrt.WriteStartElement("", "Default", namespace);
            xmlWrt.WriteElementString("Label", namespace, "ROUTE");
            xmlWrt.WriteElementString("Value", namespace, "");  
            xmlWrt.WriteElementString("Iteration", namespace, "0");
            xmlWrt.WriteEndElement(); //Default

            //Get the orders from the man
            orderCount = 0;
            manOrder = new List<ManOrder>();

            //ERRORS NO WHERE CLAUSE in Error 1 'System.Collections.Generic.List does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'System.Collections
            manOrder = manOrder.Where(w => w.conRef == vRef).ToList();

            foreach (ManOrder manLine in manOrder)
            {
                orderCount++;
                xmlWrt.WriteStartElement("", "Default", namespace);
                xmlWrt.WriteElementString("Label", namespace, "REF");
                xmlWrt.WriteElementString("Value", namespace, manLine.orderNumber);
                xmlWrt.WriteElementString("Iteration", namespace, orderCount.ToString());  
                xmlWrt.WriteEndElement(); //Default
            }

            for (int i = 0; i <= orderCount; i++)
            {
                xmlWrt.WriteStartElement("", "Default", namespace);
                xmlWrt.WriteElementString("Label", namespace, "VER");
                xmlWrt.WriteElementString("Value", namespace, "0"); 
                xmlWrt.WriteElementString("Iteration", namespace, i.ToString());  
                xmlWrt.WriteEndElement(); //Default
            }

            xmlWrt.WriteEndElement(); //Defaults                               

            //Panels
            xmlWrt.WriteStartElement("", "Panels", namespace);
            xmlWrt.WriteStartElement("", "Panel", namespace);
            xmlWrt.WriteElementString("Name", namespace, "Details");
            xmlWrt.WriteStartElement("", "Columns", namespace);

            //OrderReferences
            orderCount = 0;
            foreach (ManOrder manLine in manOrder)
            {
                orderCount++;
                xmlWrt.WriteStartElement("", "PanelColumn", namespace);
                xmlWrt.WriteElementString("Label", namespace, string.Format("Ref{0}", orderCount.ToString()));
                xmlWrt.WriteElementString("Value", namespace, manLine.orderNumber); 
                xmlWrt.WriteElementString("Iteration", namespace, "0");
                xmlWrt.WriteEndElement(); //PanelColumn
            }
        }

        string strDate = "";
        strDate = @"C:\Dump\" + "XML" + strDate + ".xml";
        xmlWrt.WriteEndElement();
        xmlWrt.WriteEndDocument();
        xmlWrt.Flush();
        memStream.Position = 0;
        using (FileStream file = new FileStream(strDate, FileMode.Create, System.IO.FileAccess.Write))
        {
            byte[] bytes = new byte[memStream.Length];
            memStream.Read(bytes, 0, (int)memStream.Length);
            file.Write(bytes, 0, bytes.Length);
            memStream.Close();
        }
    }
}

I found out that you can use the FindAll method and remove the ToList.

Lambda expression are not used until .net 3.0 in SSIS.

so my line of code is manOrder = manOrder.FindAll(w => w.conRef ==vRef);

Thanks

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM