2017-09-24 160 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