簡體   English   中英

這兩個語句(asp.net/c#/entity框架)有什么區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM