No aplica filtro en números y fechas usando Filter Datatable y LinQ Select

Buenas tardes:
Tengo un archivo excel con los datos cédula, nombre, apellido, Cargo, salario, fecha de ingreso y fecha de nacimiento. Estoy intentando filtrar por filter datatable pero no me muestra ningún valor. Utilice linQ select para aplicar filtros pero sólo me filtra los string, pero si quiero aplicar más filtros en fechas y salario no me muesta nada.

Puse mis argumentos
De entrada in_DTSalarios tipo datatable value vDTBSalarios y de salida out_DTResultadoFiltro value vDTBResultadoFiltro

Codigo

Dim vArrFiltroTechLead As DataRow()

Try 
	vArrFiltroTechLead = in_DTSalarios.Select( "[Cargo] = 'Tech Lead' AND [Fecha de Ingreso] < '20/08/2020' AND [Salario] > 7000000 ")
	If vArrFiltroTechLead.Count >0 Then
		out_DTResultadoFiltro = vArrFiltroTechLead.CopyToDataTable()
	End If

Catch ex As Exception

End Try

@Vanessa_Ortiz

Try this

requireddt = dt.AsEnuemrable.Where(function(x) x("Col1").ToString.Contains("abc") AndAlso Cdate(x("DateCol").ToString)> Now AndAlso Cdbl(x("NumberCol").ToString) > 24).CopyToDatatable

In example shown a string,a date and a number

Cheers

no nada, no me filtra absolutamente nada y he trabajado uno por uno

He hecho esto en la tabla de datos.

ID Name Surname Department Salary Date of Birth
1 John Doe IT 60000 01-01-1990 12.00.00 AM
2 Jane Smith HR 45000 01-01-1995 12.00.00 AM
3 Peter Jones Sales 52000 01-01-1985 12.00.00 AM
4 Mary Brown IT 75000 01-01-1992 12.00.00 AM
5 David Williams Marketing 48000 01-01-1998 12.00.00 AM

Aplicó el filtro where Departmnet = IT, minSalary gather then 50000 and [“Date of Birth”] between 1989, 01, 01 and 2024, 01, 01

Mi caso pasa por debajo del filtro en mis datos, usted prueba el código según mis datos y aplica el mismo filtro

   string department = "IT";
   DateTime startDate = new DateTime(1989, 01, 01);
   DateTime endDate = new DateTime(2024, 01, 01);
   decimal minSalary = 50000;

El siguiente código funciona para mí.

   var filteredResults = dtSalarios.AsEnumerable()
   .Where(row =>
       row["Department"].ToString() == department &&
      (DateTime)row["Date of Birth"] >= startDate &&
      (DateTime)row["Date of Birth"] <= endDate &&
       (decimal)row["Salary"] >= minSalary)
   .Select(row => new {
       ID = row["ID"],
       Name = row["Name"] + " " + row["Surname"],
       Department = row["Department"],
       Salary = row["Salary"],
       DateOfBirth = row["Date of Birth"]
   }).ToList();

Output of result

@Vanessa_Ortiz Espero que resuelva tu problema, necesitas modificar este archivo según tus necesidades.

Datos+Datatable.xlsx (95,9 KB)

Buenos días, el problema radica en que el salario y la fecha no está en un formato americano, sino en el salario de pesos colombianos y la fecha que es dia/mes/año

Intenté usar el Culture Info pero no me muestra los formatos que deseo

System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(“es-CO”) para colombia y no me pone el formato correcto

System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(“es-PE”) para Perú y tampoco me pone el formato correcto

Luego de ello intento hacer el filtro y tampoco puedo. Por el filter datatable no se pueden filtrar fechas y salario, solo string

Intenté con el LinQ pero tampoco filtra ya que entiendo, que el .Select solo está filtrando string y no int32 o day.

Dim vArrFiltroTechLead As DataRow()
Try
vArrFiltroTechLead = in_DTSalarios.Select( "[Cargo] = ‘Tech Lead’ AND [Fecha de Ingreso] < ‘20/08/2020’ AND [Salario] > 7000000 ")
If vArrFiltroTechLead.Count >0 Then
out_DTResultadoFiltro = vArrFiltroTechLead.CopyToDataTable()
End If
Catch ex As Exception
end Try

@Vanessa_Ortiz
lets not mixup the DataTable.Select Method (Not LINQ) and the LINQ Filter Operator: Where

For dates you can use the DateTime.ParseExact Method along with the format specifier

In general you can also do some analysis on the formats as described here:
:ambulance: :sos: [FirstAid] Datatable: Debug & Analysis invalid DateTime Strings / String to DateTime Parsing Issues - News / Tutorials - UiPath Community Forum

A filter Linq could look like this:

Assign Activity:
dtFiltered =

(From d in in_DTSalarios.AsEnumerable
Where d("Job Title").toString.Trim.Equals("Tech Lead")
Let dp = DateTime.ParseExact(d("Join Date").toString.Trim, "YOURFORMATSTRING", System.Globalization.CultureInfo.InvariantCulture)
Where dp.Date < #08/20/2020#
Let ds = Double.Parse(d("Salary").toString.Trim, YOURMATCHING_CultureInfoVar)
Where ds > 7000000
Select r =d).CopyToDataTable

Handling Empty results as you had done with the count check

Handling double specifics as described: check within the immediate panel

About LINQ:
[HowTo] LINQ (VB.Net) Learning Catalogue - Help / Something Else - UiPath Community Forum

UPD1 -
simplifed check Date
UPD2 - fixings