2017-09-24 114 views
0

这段代码为什么工作?IQueryable.First是否接受委托?

List<string> list = new List<string>(); 
list.Add("foo"); 

IQueryable<string> query = list.AsQueryable(); 
var test = query.First((Func<string,bool>)(s => { return s.Contains("foo"); })); 

我以为IQueryable.First只接受一个表达式。为什么在这种情况下接受委托?

回答

0

IQueryable<T>延伸IEnumerable<T>

public interface IQueryable<out T> : IEnumerable<T>, IEnumerable, 
    IQueryable 

所以你的方法实际上是Enumerable.First,而不是Queryable.First通话。

你可以看到在方法列表中IQueryable<T> documentation on MSDN看时:

enter image description here

+0

如果我没有用一个演员,我会得到一个错误。是因为它试图将lambda转换为Expression而不是委托? – Gradient

+0

你是什么意思*我会得到一个错误*?你指的是什么演员?转换为'IQueryable '或'Func '? –

+0

转换为'Func '。没有它,我得到一个错误。 – Gradient