【发布时间】:2019-01-03 03:55:06
【问题描述】:
我一直在互联网上搜索Func和Expression Func之间的区别,不知何故我明白了,第一个只是一个函数获取数据然后将函数应用到内存中,但第二个,将其翻译为sql并在数据库中运行它,在我运行这两个查询之后:
public IEnumerable<T> SelectAll(Expression< Func<T, bool>> predicate)
{
return table.Where(predicate).ToList();
}
public IEnumerable<T> SelectAll(Func<T, bool> predicate)
{
return table.Where(predicate).ToList();
}
我把断点放在返回上,第一个返回12行,第二个返回1200行,谓词是:
s=>s.id="12345"
第二个,得到数据后应用谓词,我的问题是,我们在处理DB时通常应该使用表达式func吗?
【问题讨论】:
-
"但是第二个,把它翻译成 sql" 更精确地翻译成最终可以翻译成 SQL(或其他东西)的东西
-
虽然这两种方法中的代码看起来相同,但实际上调用的是不同的静态扩展
Where方法 - 来自Queryable和来自Enumerable。