Wednesday 18 March 2015

groupby query in C# linq

 var query = students.GroupBy(x => x.LastName)
                                .Select(g => g.FirstOrDefault())
                //.OrderByDescending(x => x.LastName)
                                .Select(x => new { lastName = x.LastName, fName = x.FirstName });

            var qqq = students.Select(s => s.LastName)
            .Distinct()
            .OrderByDescending(p => p)
            .Select(p => new { RR = p });


            var q = students.Where(x => x.LastName.Equals("Feng"));
            var q1 = students.GroupBy((x => x.LastName));

            Console.WriteLine("Group by a single property in an object:");

            var query1 =
                from s in students
                group s by s.LastName into newGroup
                orderby newGroup.Key
                select newGroup;

            foreach (var nameGroup in query1)
            {
                Console.WriteLine("Key: {0}", nameGroup.Key);
                foreach (var student in nameGroup)
                {
                    Console.WriteLine("\t{0}, {1}", student.LastName, student.FirstName);
                }
            }

Tuesday 17 March 2015

Type of hosting in WCF

WCF service can be hosted by following mechanism
  • IIS
    Internet information Service provides number of advantages if a Service uses Http as protocol. It does not require Host code to activate the service, it automatically activates service code.
  • Windows Activation Service
    (WAS) is the new process activation mechanism that ships with IIS 7.0. In addition to HTTP based communication, WCF can also use WAS to provide message-based activation over other protocols, such as TCP and named pipes.
  • Self-Hosting
    WCF service can be self hosted as console application, Win Forms or WPF application with graphical UI.
  • Windows Service
    WCF can also be hosted as a Windows Service, so that it is under control of the Service Control Manager (SCM).

Convert XML to JSON using C#/LINQ

using System;using System.Linq;using System.Web.Script.Serialization;using System.Xml.Linq;class Program{
    static void Main()
    {
        var xml = 
        @"<Columns>
          <Column Name=""key1"" DataType=""Boolean"">True</Column>
          <Column Name=""key2"" DataType=""String"">Hello World</Column>
          <Column Name=""key3"" DataType=""Integer"">999</Column>
        </Columns>";
        var dic = XDocument
            .Parse(xml)
            .Descendants("Column")
            .ToDictionary(
                c => c.Attribute("Name").Value, 
                c => c.Value
            );
        var json = new JavaScriptSerializer().Serialize(dic);
        Console.WriteLine(json);
    }}
produces:
{"key1":"True","key2":"Hello World","key3":"999"}

Thursday 12 March 2015

get single record from C# datatable

 var stDetailId = (from DataRow dr in dtDataStation.Rows
                                  where Convert.ToString(dr["Station"]) == arrStation[0]
                                  select (string)dr["Identifier"]).FirstOrDefault();

how to remove column in C# datatable

 DataTable dtFiltered = RemoveDuplicatesRecords(dtData);  // method to remove duplicate value
            dtFiltered.Columns.Remove("Series");
            dtFiltered.Columns.Remove("Parameter Type");
            dtFiltered.Columns.Remove("Data Type");

remove duplicate record

 private DataTable RemoveDuplicatesRecords(DataTable dt)
        {
            //var UniqueRows = dtS.AsEnumerable().Distinct(DataRowComparer.Default);
            //DataTable dt2 = UniqueRows.CopyToDataTable();
            //return dt2;

            var UniqueRows = dt.AsEnumerable()
                       .GroupBy(x => x.Field<string>("Station"))
                       .Select(g => g.First());
            DataTable dt2 = UniqueRows.CopyToDataTable();
            return dt2;

        }

inner join in C# using linq

 #region Join for Single and Multiple Tables using dataSet
        //----------Join for single and Multiple Tables----------//
        public DataTable JoinDataTables(DataSet dsData)
        {
            DataTable dtOutput = new DataTable("dtOutput");

            if (dsData.Tables.Count.Equals(1))
            {
                dtOutput = dsData.Tables[0];
            }
            else if (dsData.Tables.Count.Equals(2))
            {
                dtOutput = FullOuterJoinForDataTable(dsData.Tables[0], dsData.Tables[1]);
            }
            else if (dsData.Tables.Count > 2)
            {
                dtOutput = FullOuterJoinForDataTable(dsData.Tables[0], dsData.Tables[1]);
                DataTable dtMid = new DataTable("dtMid");
                if (dtOutput != null && dtOutput.Rows.Count > 0)
                {
                    dtMid.Columns.Add("date_dt", typeof(DateTime));
                    dtMid.Columns.Add("datavalue_n", typeof(double));

                    foreach (DataRow drFinal in dtOutput.Rows)
                    {
                        DataRow drMid = dtMid.NewRow();
                        drMid[0] = drFinal.ItemArray[0];
                        drMid[1] = drFinal.ItemArray[1];
                        dtMid.Rows.Add(drMid);
                    }
                }
                for (int tableCount = 2; tableCount < dsData.Tables.Count; tableCount++)
                {
                    if (dtMid != null || dtMid.Rows.Count > 0)
                    {
                        DataTable dtResult = FullOuterJoinForDataTable(dtMid, dsData.Tables[tableCount]);
                        if (dtResult != null && dtResult.Rows.Count > 0)
                        {
                            dtOutput.Columns.Add("Series " + (tableCount + 1), typeof(double));
                            for (int i = 0; i < dtResult.Rows.Count; i++)
                            {
                                dtOutput.Rows[i]["Series " + (tableCount + 1)] = dtResult.Rows[i][dtResult.Columns.Count - 1];
                            }
                        }
                    }
                }

            }
            return dtOutput;
        }

        #endregion

        #region INNER JOIN for Common Date data
        public DataTable FullOuterJoinForDataTable(DataTable dtParam1, DataTable dtParam2)
        {
            DataTable dtOutput = new DataTable("dtOutput");
            //dt.Columns.Add("Station Detail Id", typeof(string));
            dtOutput.Columns.Add("date_dt", typeof(DateTime));
            dtOutput.Columns.Add("Series 1", typeof(double));
            dtOutput.Columns.Add("Series 2", typeof(double));

            var result = from datavalue1 in dtParam1.AsEnumerable()
                         join datavalue2 in dtParam2.AsEnumerable()
                         on datavalue1.Field<DateTime>("date_dt")
                         equals datavalue2.Field<DateTime>("date_dt")

                         select dtOutput.LoadDataRow(new object[]
                            {
                            datavalue1.Field<DateTime>("date_dt"),
                            datavalue1.Field<double?>("datavalue_n"),
                            datavalue2.Field<double?>("datavalue_n")
                            }, false);

            //---------------copy output of result into datatable named 'dtCommonDataOutPut'---------------//

            if (result != null && result.Count() > 0)
            {
                dtOutput = result.CopyToDataTable();
            }

            return dtOutput;
        }
        #endregion

foreach loop in C#

 foreach (DataRow drRow in dt.Rows)
                    {
                        DataRow dr = dtNew.NewRow();
                        if (drRow[2] != DBNull.Value)
                        {
                            dr["date_dt"] = Convert.ToDateTime(drRow[0]);
                            dr["datavalue_n"] = Convert.ToDouble(drRow[2]) * Convert.ToDouble(dtSelectedRows.Rows[iRow][3]);
                            dtNew.Rows.Add(dr);
                        }
                        else
                        {
                            objGlobalUIMethods.MsgShow("eMsg", "Series have missing value.");
                        }
                    }

convert string to array

  public Array StringToArray(string str)
        {
            return ConvertStringToList(str).ToArray();
        }

convert array to string in C#

  public string ArrayToString(Array str)
        {
            return string.Join("@", str);
        }
      

convert list to string in C#

  public string ConvertListToString(List<string> lst)
        {
            return string.Join("@", lst.ToArray());
        }
      

convert string to list in C#

 public List<string> ConvertStringToList(string str)
        {
            return str.Split('@').ToList();
        }
      

convert string to datatable

  public DataTable ConvertStringToDataTable(string xmlString, int i = 0)
        {

            string[] strXmlString = xmlString.Split('*');
            string xmlDataString = strXmlString[0];
            string xmlCaptionString = strXmlString[1];
            string[] arrCaption = xmlCaptionString.Split('#');
            string xmlDataTypeString = strXmlString[2];
            string[] arrDataType = xmlDataTypeString.Split('#');

            DataSet dataSet = new DataSet("HDA" + i);
            StringReader stringReader = new StringReader(xmlDataString);
            dataSet.ReadXml(stringReader);
            dataSet.Tables[0].TableName = "product" + i;

            for (int j = 0; j < dataSet.Tables[0].Columns.Count; j++)
            {
                dataSet.Tables[0].Columns[j].Caption = arrCaption[j];
            }

            DataTable dtCloned = dataSet.Tables[0].Clone();
            for (int j = 0; j < dataSet.Tables[0].Columns.Count; j++)
            {
                switch (arrDataType[j])
                {
                    case "Double":
                        dtCloned.Columns[j].DataType = typeof(double);
                        break;
                    case "String":
                        dtCloned.Columns[j].DataType = typeof(string);
                        break;
                    case "DateTime":
                        dtCloned.Columns[j].DataType = typeof(DateTime);
                        break;
                    case "Int32":
                        dtCloned.Columns[j].DataType = typeof(Int32);
                        break;
                    default:
                        dtCloned.Columns[j].DataType = typeof(double);
                        break;
                }
            }

            DataTable dtTemp = dataSet.Tables[0];
            DataRow drCloned;

            foreach (DataRow row in dtTemp.Rows)
            {
                drCloned = dtCloned.NewRow();
                for (int colIndex = 0; colIndex < dtTemp.Columns.Count; colIndex++)
                {
                    if (row[colIndex].Equals(string.Empty))
                    {
                        drCloned[colIndex] = DBNull.Value;
                    }
                    else
                    {
                        drCloned[colIndex] = row[colIndex];
                    }
                }
                dtCloned.Rows.Add(drCloned);
            }

            return dtCloned;

        }

convert datatable to string in C#

 public string ConvertDataTableToString(DataTable dt, int i = 0)
        {

            string strCaption = string.Empty;
            string strDataType = string.Empty;
            DataRow drCloned;
            int colIndex;
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                strCaption = strCaption + dt.Columns[j].Caption + "#";
                strDataType = strDataType + dt.Columns[j].DataType.Name + "#";
            }

            DataTable dtCloned = dt.Clone();
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                dtCloned.Columns[j].DataType = typeof(string);
            }
            foreach (DataRow row in dt.Rows)
            {
                colIndex = 0;
                drCloned = dtCloned.NewRow();
                //drCloned = row;
                foreach (DataColumn col in dt.Columns)
                {
                    if (row[col].Equals(DBNull.Value))
                    {
                        drCloned[colIndex] = string.Empty;
                    }
                    else
                    {
                        drCloned[colIndex] = row[col];
                    }
                    colIndex++;
                }
                dtCloned.Rows.Add(drCloned);
            }

            DataSet ds1 = new DataSet();
            ds1.Tables.Add(dtCloned.Copy());
            ds1.Tables[0].TableName = "Table" + i;
            string str = ds1.GetXml().ToString();
            return string.Concat(str, "*", strCaption, "*", strDataType);
        }

how to get sum of values of single column in C# datatable

 dSumofWeights = Convert.ToDouble(dtGrid.Compute("Sum(weight)", ""));