Я пытаюсь создать динамический скомпилированный предикат и использовать его для запроса Entity Framework ObjectSet.
Следующий код выполняется и возвращается правильный результат, но оператор SQL SELECT генерируется без предложения WHERE:
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();
Сгенерированный оператор SQL:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[HighSchoolID] AS [HighSchoolID],
[Extent1].[TypeID] AS [TypeID],
[Extent1].[Name] AS [Name]
FROM [dbo].[Faculties] AS [Extent1]
и когда я использую явное выражение типа
var res = db.DBContext.Faculties.Where(f => f.HighSchoolID == 90);
генерируется правильный SQL.
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[HighSchoolID] AS [HighSchoolID],
[Extent1].[TypeID] AS [TypeID],
[Extent1].[Name] AS [Name]
FROM [dbo].[Faculties] AS [Extent1]
WHERE 90 = [Extent1].[HighSchoolID]
Как заставить EF создать предложение WHERE в SQL?