c# - EF does not generate correct SQL SELECT WHERE when using dynamic compiled predicate -


i trying create dynamic compiled predicate , use querying entity framework objectset. following code executed , correct result returned,but sql select statement generated without clause:

 var db = new dbhelper();   parameterexpression entity = expression.parameter(typeof(highschoolservicesdataaccess.faculty), "entity");  var filterentity = expression.lambda(expression.equal(expression.property(entity, "highschoolid"), expression.constant(90, typeof(int))), entity);  func<highschoolservicesdataaccess.faculty, bool> predicate = (func<highschoolservicesdataaccess.faculty, bool>)filterentity.compile();   var res = db.dbcontext.faculties.where(predicate);  datagridview2.datasource = res.tolist(); 

generated sql statement is:

select      [extent1].[id] [id],      [extent1].[highschoolid] [highschoolid],      [extent1].[typeid] [typeid],      [extent1].[name] [name] [dbo].[faculties] [extent1] 

and when use explicit expression like

var res = db.dbcontext.faculties.where(f => f.highschoolid == 90); 

correct sql generated.

select      [extent1].[id] [id],      [extent1].[highschoolid] [highschoolid],      [extent1].[typeid] [typeid],      [extent1].[name] [name] [dbo].[faculties] [extent1] 90 = [extent1].[highschoolid] 

how can force ef produce clause in sql?

not sure, you're setting predicate compiled func<...> , not keeping expression<func<...>>, it's getting converted il before ef has chance process it? have tried e.g.

var predicate =     (expression<func<highschoolservicesdataaccess.faculty, bool>>)filterentity; 

?


Comments