Linq to SQL中的一个问题,有关Expression<Func<XX, bool>>和Func<XX, bool>
Hi,
这是我的两段代码:
C# code
ScDataContext db = new ScDataContext();
db.Log = Console.Out;
Expression<Func<TrainingType, bool>> predicate = p => p.Id == 1;
TrainingType type = db.TrainingTypes.FirstOrDefault(predicate);
这样,生成的SQL语句就会是:Select .... From .... Where ... id = 1 ...
而如果不是向FirstOrDefault中传递表达式树,而是传入一个Func委托:
C# code
Func<TrainingType, bool> predicate = p => p.Id == 1;
TrainingType type = db.TrainingTypes.FirstOrDefault(predicate);
那生成的SQL中就不会有Where子句。
这是什么原因呢?
------解决方案--------------------其实归根结底是两个接口的区别 你可以查一下
------解决方案--------------------参考
------解决方案--------------------ms-help://MS.MSDNQTR.v90.chs/fxref_system.core/html/4c9e45f9-0507-c4c6-7b25-3b7a5264e100.htm
IQueryable<(Of <(T>)>)..::.FirstOrDefault 方法
FirstOrDefault(Func<(Of <(UTP, Boolean>)>))
返回序列中满足条件的第一个元素;如果未找到这样的元素,则返回默认值。 (由 Enumerable 定义。)
已经查出所有记录,然后应用Func
FirstOrDefault(Expression<(Of <(Func<(Of <(UMP, Boolean>)>)>)>))
返回序列中满足指定条件的第一个元素,如果未找到这样的元素,则返回默认值。 (由 Queryable 定义。)
将表达式直接应用到SQL中.
他们是两种实现.