首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Linq to SQL中的一个有关问题,有关Expression<Func<XX, bool>>和Func<XX, bool>

2011-12-28 
Linq to SQL中的一个问题,有关ExpressionFuncXX, bool和FuncXX, boolHi,这是我的两段代码:C# codeSc

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中.

他们是两种实现.

热点排行