IQueryable.First 是否接受委托?

Does IQueryable.First accepts a delegate?

为什么这段代码有效?

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 只接受一个表达式。为什么在这种情况下接受委托?

IQueryable<T> 扩展 IEnumerable<T>:

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

所以你的方法实际上是调用 Enumerable.First 而不是 Queryable.First.

您可以在 IQueryable<T> documentation on MSDN:

查看方法列表时看到