简体   繁体   中英

CS1929 C# 'RfcParameterClass' does not contain a definition for 'Cast'

CS1929 C# 'RfcParameterClass' does not contain a definition for 'Cast' and the best extension method overload 'ParallelEnumerable.Cast(ParallelQuery)' requires a receiver of type 'ParallelQuery'

Hello everyone, I am making a method which works with SAP RFC connector. The connection works fine and I am able to get data from SAP easily but problem is with using this data. The CS1929 error causses the query on the bottom of the code. I would like to set a lot of "MLFBCode" instances from those data. Can anyone help me please? I am using VS 16.7.3 and .NET Core 3.1. Thank you a lot!

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text.RegularExpressions;
using RFCCONNECTORLib;
using SmartLab_System.AppConfig;
using SmartLab_System.Models;
using RfcData = RFCCONNECTORLib.RfcParameterClass;
using RfcRow = RFCCONNECTORLib.RfcFields;

namespace SmartLab_System.Data
{
    public static class RFCMethodsForSLS
    {
        private static NWRfcSession Session = new NWRfcSession();
        //Info: https://rfcconnector.com/documentation/api/session/
        public static bool WasConnected { get; private set; } = true;
        public static Regex RegexPattern { get; private set; } = new Regex(Validation.MLFBLuke);

        /// <summary>
        /// Calls the "Connecting" method which returns wanted MLFB entries from SAP
        /// </summary>
        /// <param name="inputString">String which will be searched</param>
        /// <param name="strLanguage">Set language "CS", "EN", "DE", ...</param>
        /// <param name="maxRows">Set maximum returned rows count</param>
        public static List<MLFBCode> GetMLFBData(string inputString, int maxRows = 100000, string strLanguage = "CS", string onlyIn4711 = "X")
        {
            string functionName = "/SIE/AD_ZPE_TL_MAT_INFO";
            List<KeyValuePair<string, string>> inputParameters = new List<KeyValuePair<string, string>>();
            List<string> outPutParameters = new List<string>();

            inputParameters.Add(new KeyValuePair<string, string>("INPUT_STRING", inputString));
            inputParameters.Add(new KeyValuePair<string, string>("LANG", strLanguage));
            inputParameters.Add(new KeyValuePair<string, string>("ONLY_IN_4711", onlyIn4711));

            outPutParameters.Add("MLFB");               // mlfb
            outPutParameters.Add("MATNR");              // matnr (number)
            outPutParameters.Add("MAKTG");              // text  (description)
            outPutParameters.Add("DEL_STAT");           // vymaz na urovni master dat           - "X" means Deleted
            outPutParameters.Add("DEL_STAT_WERK");      // vymaz na urovni zavodu               - "X" means Deleted
            outPutParameters.Add("DEL_DISPO_99");       // docasny vymaz na urovni disponenta   - "X" means Deleted
            outPutParameters.Add("DEL_STAT_LV");        // docasny vymaz statusem               - "X" means Deleted
            outPutParameters.Add("EXISTS_IN_4711");     // material zalozen pro nas zavod       - "X" means was set for OEZ

            RfcData data = (RfcData)Connecting(functionName, inputParameters);
            List<MLFBCode> mLFBs = new List<MLFBCode>();
            List<RFCOutputData> rFCOutputData = new List<RFCOutputData>();

            mLFBs = (from RfcRow dataRow in data
                           select new MLFBCode()
                           {
                               MLFB = dataRow["MLFB"].ToString(),
                               Number = dataRow["MLFB"].ToString(),
                               Description = dataRow["MAKTG"].ToString(),
                               IdGroup = 1,
                               Active = true
                           }).ToList();
            
            return mLFBs;
        }

Editting question - For sure I add the Connecting(functionName, inputParameters) method code:

private static Object Connecting(string functionName, List<KeyValuePair<string, string>> inputParameters)
    {
        Regex regex = new Regex(Validation.MLFB);
        Object data = new { };
        string[,] resultTableArray = new string[,] { };
        SetRFC();   //Set login data
        if (!Session.IsConnected)
        {
            Session.Connect();      //Connection to SAP
            if (Session.IsConnected)
            {
                FunctionCall fn = Session.ImportCall(functionName); //Set call
                foreach (KeyValuePair<string, string> param in inputParameters) //Inserting input parametters of the SAP function
                {
                    fn.Importing[param.Key].value = param.Value;
                }

                Session.CallFunction(fn, true);                                     //Calling the function
                data = fn.Tables["RESULT_TABLE"];                               //Getting data from SAP
                
            }
            else WasConnected = false;
        }
        if (WasConnected)
            Session.Disconnect();
        return data;
    }

Believe the library you're using is RFCConnector .

But it's worth mentioning that this

 from RFCRow row in data

" precompiled " to this C# code

data.Cast<RFCRow>();

And as you can see there is no a method called Cast which is defined in your RfcParameterClass class and there is no an extension method with the same name which accept RFCParameterClass type as the first parameter, so it won't compile. I guess you need to do the following:

from RfcRow row in data.Rows

UPDATE

To have the actual value of a row you need to call value on this, so your code will be like this:

(from RfcRow dataRow in data.Rows
 select new MLFBCode()
 {
     MLFB = dataRow["MLFB"].value.ToString(),
     Number = dataRow["MLFB"].value.ToString(),
     Description = dataRow["MAKTG"].value.ToString(),
     IdGroup = 1,
     Active = true
  }).ToList();

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