Convert Linq to DataTable

         var query = (from employees in _dsSecurity.Employees.AsEnumerable()
                                 join empSites in _dtEmployeesSite
                                     on employees.EmployeeId equals empSites.EmployeeId
                                 join empFilter in _dtScheduleProviders.AsEnumerable()
                                     on employees.EmployeeId equals (Guid)empFilter["EmployeeId"]
                                 where empSites.Field("SiteId") == (siteId) && empSites.Field("TheWeekDaysId") == dayNumber
                                     && empSites.StartTime.ToLocalTime().TimeOfDay <= StartTime
                                     && empSites.EndTime.ToLocalTime().TimeOfDay >= EndTime
                                 select new
                                 {
                                     employees.EmployeeId,
                                     EmployeeCode = employees.Field("EmployeeCode"),
                                     EmployeeTypeId = Guid.Empty,
                                     FirstName = employees.Field("FirstName"),
                                     LastName = employees.Field("LastName"),
                                     MiddleName = employees.Field("MiddleName"),
                                     Title = employees.Field("Title"),
                                     Prefix = employees.Field("Prefix"),
                                     Suffix = employees.Field("Suffix"),
                                     EmployeeImage = employees["EmployeeImage"],
                                     Credentials = employees.Field("Credentials"),
                                     Salutation = employees.Field("Salutation"),
                                     IsInternal = employees.Field("IsInternal"),
                                     IsClinician = employees.Field("IsClinician"),
                                     employees.SchedulerTypeId,
                                     HomePhone = employees.Field("HomePhone"),
                                     CellPhone = employees.Field("CellPhone"),
                                     IsActive = employees.Field("IsActive"),
                                     EmployeeName =
                                     employees.Field("LastName") + ", " + employees.Field("FirstName"),
                                     employees.CreatedOn,
                                     employees.CreatedBy,
                                     employees.LastModifiedOn,
                                     LastModifiedBy = employees.Field("LastModifiedBy"),
                                     IsShowOnSchedule = employees.Field("IsShowOnSchedule")
                                 }).Distinct();

                    DataTable dtEmp = _dsSecurity.Employees.Clone();
                    dtEmp = ToADOTable(query);



---------Convert Linq To Data Table----------------
 private DataTable ToADOTable(IEnumerable varlist)
        {
            DataTable dtReturn = new DataTable();
            try
            {
                // column names   
                PropertyInfo[] oProps = null;
                if (varlist == null)
                    return dtReturn;
                foreach (T rec in varlist)
                {
                    // Use reflection to get property names, to create table, Only first time, others will follow     
                    if (oProps == null)
                    {
                        oProps = (rec.GetType()).GetProperties();
                        foreach (PropertyInfo pi in oProps)
                        {
                            Type colType = pi.PropertyType;
                            if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                            {
                                colType = colType.GetGenericArguments()[0];
                            }
                            dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
                        }
                    }
                    DataRow dr = dtReturn.NewRow();
                    foreach (PropertyInfo pi in oProps)
                    {
                        dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
                    }
                    dtReturn.Rows.Add(dr);
                }
            }
            catch (ExceptionBase exceptionBase)
            {
                Common.Generic.ShowSendToSupportMessage(exceptionBase.Message, exceptionBase.ExceptionDetails);
            }
            catch (System.Exception ex)
            {
                UILayerException uiLayerException = new UILayerException(ex, ExceptionSeverity.Error);
                Common.Generic.ShowSendToSupportMessage(uiLayerException.Message, uiLayerException);
            }
            return dtReturn;
        }


Comments

Popular posts from this blog

Querying a Data Table Using Select Method and Lambda Expressions in Dot Net

StringToTable

GetPhoneSSNFormat