2010-05-25 43 views
1
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应用程序中,我可以以任何方式编写它们,并且就我如何使用它们而言,它们都可以工作,但必须有一个原因才能选择其中一个。 ?这两条语句有什么区别(asp.net/c#/entity framework)

回答

2
(from D in myContext.Departments orderby D.DeptName select D); 

返回IQueriable<Department>型这反过来当你使用var关键字在这里编译器IQueriable<Department>

2

第二个更短(假设D的类型是Department)。

(实际上,查询的返回类型可能比IEnumerable其他,像IQueryable但问题是,该类型将是从赋值运算符的右侧静态推断,而不是在被明确提及码)。

1

我相信在第二情况下myQuery类型是IQueryable<Department>而非IEnumerable。如果你不需要任何特定于IQueryable的东西,而IEnumerable则无法做到这一点,那么它们的行为是相同的。

关键字var只是为了方便,编译器可以在不拼写的情况下找出类型。因此,而不是

MyReallyLongGenericClassName<SomeOtherType> myObject = new MyReallyLongGenericClassName<SomeOtherType>();

你可以只写var myObject = new MyReallyLongGenericClassName<SomeOtherType>();

1

使用var编译器推断更改为MyQuery的类型。它可能最终是IQueryable<Department>而不是IEnumerable<Department>

1

这里唯一的不同更换它实现IEnumerable<Department>

的目的是,你是不是宣布自己的myQuery的类型。您正在利用名为Type Inference的功能。事实上,返回的类型将是IQueryable<Department>,其中第一个语句显式键入变量IEnumerable