mhe*_*abi 5 c# sql-server lambda
请看看这些线:
1.在这种情况下,我直接在方法中键入where语句
public List<User> GetUsers()
{
return _entity.Where(x => x.Id == 1).ToList();
}
Run Code Online (Sandbox Code Playgroud)
执行的sql查询是:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Username] AS [Username],
[Extent1].[Password] AS [Password],
[Extent1].[Email] AS [Email],
[Extent2].[Id] AS [Id1]
FROM [dbo].[Account_Users] AS [Extent1]
LEFT OUTER JOIN [dbo].[Account_Profiles] AS [Extent2] ON [Extent1].[Id] = [Extent2].[UserId]
WHERE 1 = [Extent1].[Id]
Run Code Online (Sandbox Code Playgroud)
2.在这种情况下,我使用Func for generic where子句
public List<User> GetUsers(Func<User, bool> where)
{
return _entity.Where(where).ToList();
}
var users = _acc.GetUsers(x => x.Id == 1);
Run Code Online (Sandbox Code Playgroud)
执行的sql查询是:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Username] AS [Username],
[Extent1].[Password] AS [Password],
[Extent1].[Email] AS [Email],
[Extent2].[Id] AS [Id1]
FROM [dbo].[Account_Users] AS [Extent1]
LEFT OUTER JOIN [dbo].[Account_Profiles] AS [Extent2] ON [Extent1].[Id] = [Extent2].[UserId]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在案例2中where子句WHERE 1 = [Extent1].[Id]缺失,因此整个记录存储在内存中.你知道为什么where子句没有在sql查询中翻译?
我想用Func<t, bool>在.Where()所以这将是通用的,没有必要创建函数为每个查询.
有什么方法可以使用.Where(Func<t, bool>),还可以在sql查询中看到翻译的where子句?
Glo*_*del 10
如果希望lambda在SQL中执行,则需要将其作为Expression传递,而不是函数:
public List<User> GetUsers(Expression<Func<User, bool>> where)
{
return _entity.Where(where).ToList();
}
var users = _acc.GetUsers(x => x.Id == 1);
Run Code Online (Sandbox Code Playgroud)
如果你想知道差异是什么(毕竟,lambda本身看起来一样),看看这个问题.