由 LINQ 生成的查询将删除 where 子句
本文关键字:删除 where 子句 查询 LINQ | 更新日期: 2023-09-27 18:30:55
我正在使用 LINQ 生成一个简单的查询。我的模型是
public class Employee
{
public int EmployeeId {get; set;}
public string FirstName {get; set;}
[Required]
public string LastName {get; set;}
}
我的 LINQ 查询是
var q = db.Employees.Where (i => i.LastName != null);
此查询将转换为以下 SQL(请参阅没有 where
子句)
SELECT
[Extent1].[EmployeeId ] AS [EmployeeId],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName]
FROM [dbo].[Employees] AS [Extent1]
如果我从模型中删除 Required
属性,SQL 查询将添加 Where
子句。因此,我假设 LINQ 通过删除 where 子句来优化查询。但我想保留 Required
属性并想使用 LINQ。有什么解决方法吗?
由于我正在处理旧数据库,因此我有一些LastName
为空的记录。但是我想添加Required
字段,以便所有新记录都具有LastName
的值。
我假设您正在使用代码优先来生成数据库。 似乎正在发生的事情是,您正在针对不可为空的数据库列添加IS NOT NULL
条件,EF 似乎正在优化该条件。
如果数据库列不可为空,则使用 IS NOT NULL
WHERE
子句毫无意义。
如果数据库列可为空,但您希望模型需要一个值,则可能需要添加另一个层以将域模型与数据库架构分开。 EF 旨在尽可能接近地对数据架构进行建模。 如果要应用与数据约束不同的业务规则,则可能需要在 ViewModel(或任何适合您的体系结构)中应用该规则。