[英]What is the difference between these two statements (asp.net/c#/entity framework)
IEnumerable<Department> myQuery = (from D in myContext.Departments orderby D.DeptName select D);
var myQuery = (from D in myContext.Departments orderby D.DeptName select D);
上面的這兩個語句有什么區別? 在我小的asp.net/C#/ EF4.0應用程序中,我可以用任何一種方式編寫它們,而且就我想如何使用它們而言,它們都可以工作,但是必須要有一個理由我選擇一個?
第二個較短(假設D
類型為Department
)。
(實際上,查詢的返回類型可能不是IEnumerable
,而是IQueryable
而不是IEnumerable
,但要指出的是,該類型將從賦值運算符的右側進行靜態推斷 ,而不是在代碼中明確提及)。
(from D in myContext.Departments orderby D.DeptName select D);
返回類型為IQueriable<Department>
的對象,該對象又實現IEnumerable<Department>
在此處使用var
關鍵字時,編譯器將其替換為IQueriable<Department>
我相信在myQuery
情況下, myQuery
的類型是IQueryable<Department>
而不是IEnumerable
。 如果不需要使用IEnumerable無法實現的IQueryable特定功能,則它們的行為相同。
var
關鍵字只是為了方便起見,當編譯器可以找出類型而不拼寫出來時。 所以代替
MyReallyLongGenericClassName<SomeOtherType> myObject = new MyReallyLongGenericClassName<SomeOtherType>();
您可以只寫var myObject = new MyReallyLongGenericClassName<SomeOtherType>();
使用var時,編譯器會推斷出myQuery的類型。 最終可能是IQueryable<Department>
而不是IEnumerable<Department>
。
唯一的區別是您沒有聲明自己的myQuery
類型。 您正在利用名為Type Inference的功能。 實際上,返回的類型將是IQueryable<Department>
,其中第一個語句將變量明確地鍵入IEnumerable
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.