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
Post a Comment