Linq a sql personalizado

Bien, entonces tengo un DB con una table ENORME. Más de 1 millón de loggings y más de 50 columnas. (Sé que no es óptimo, pero es con lo que tengo que trabajar). De modo que necesito ejecutar consultas que limiten la cantidad de datos devueltos. Ahora mi problema es esto. Tengo algunas consultas personalizadas que ejecutan y devuelven datos. El usuario puede filtrar esos datos más abajo al seleccionar el filter y las opciones que generarán una plantilla Pnetworkingicado y la aplica a la list. Ahora necesito tomar la list de pnetworkingicados y Combinarlos y volver a consultar el DB para search (cambios u otras inputs que coincidan). El problema es esto

private Func<table,bool> filterAll() { Func<table, bool> temp = null; var list = mylist.filterList; //filterlist is a list<Pnetworkingicate<table>> var list2 = list.Select(val => val.Value).ToArray(); foreach(var a in list2) { temp += t => a(t); } return temp; } private void loadWithFiltersButton_Click(object sender, EventArgs e) { var temp = db.table.Where(filterAll()); } 

No puedo convertir los pnetworkingicados en una consulta SQL utilizable. Recibo una exception que dice que no puedo generar el sql para la list de Pnetworkingicados. También he intentado esto

 Func<table, bool> query1 = temp2 => temp2.Name.Contains("test string"); Func<table, bool> query2 = temp2 => temp2.ignore == false; var temp = db.table.Where(query1); var myval = temp.Where(temp2 => temp2.Name.Contains("test string")).Select(val => val).ToList(); 

Y mientras eso se ejecuta, el problema es que sql genera una tabla completa y no genera ninguna cláusula where.

He estado buscando y encontré esto https://stackoverflow.com/questions/974719/how-to-use-linq-to-compile-a-lambda-expression-to-custom-sql-or-otherwise pero todos los enlaces las personas publicadas en las respuestas están muertas para mí.

Entonces, básicamente, ¿cómo puedo combinar múltiples pnetworkingicados en una consulta utilizable que hará que el db devuelva la menor cantidad posible de datos?

Editar: Probé esto también Concatenar funciones Lambda en C # pero también arroja la exception de que no se puede generar la consulta sql.

Intenta usar

 SqlMethods.Like(temp2.Name, "test string") 

en lugar de:

 temp2.Name.Contains("test string") 

Para hacerlo, debes agregar la reference:

 System.Data.Linq.SqlClient 

Si tiene una nueva List<Expression<System.Func<table, bool>>> vez de una nueva List<System.Func<table, bool>> entonces puede hacer algo como

 private void Test() { var list = new List<Expression<System.Func<table, bool>>>(); Expression<Func<table, bool>> query1 = temp2 => temp2.Name.Contains("test string"); Expression<Func<table, bool>> query2 = temp2 => temp2.ignore == false; list.Add(query1); list.Add(query2); var temp = filterAll(list).ToList(); } private System.Linq.IQueryable<table> filterAll(List<Expression<Func<table, bool>>> list2 ) { var query = table.AsQueryable(); foreach (var a in list2) { query = query.Where(a); } return query; }