Hi,
这是我的两段代码:
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委托:
Func<TrainingType, bool> predicate = p => p.Id == 1;
TrainingType type = db.TrainingTypes.FirstOrDefault(predicate);
那生成的SQL中就不会有Where子句。
这是什么原因呢?
CSDN贴:http://topic.csdn.net/u/20090419/02/3b16d644-0152-4adc-91a3-ad57c6b68ea9.html?seed=1968572159
LinqToSQL是通过遍历分析ExpressionTree来生成TSQL语句的,如果你给的不是Expression而只是一个委托那么这个委托是转不成TSQL的。
LINQ从不用拉姆达表达式的人路过。