这两个语句有什么区别(asp.net/c#/entity framework)

时间:2010-05-25 22:14:14

标签: c# asp.net 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应用程序中,我可以用任何一种方式编写它们,就我如何使用它们而言,它们都可以工作,但是我必须选择其中一个而不是另一个?

6 个答案:

答案 0 :(得分:2)

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

(实际上,查询的返回类型可能不是IEnumerable,而是IQueryable,但重点是,类型将从右侧静态推断赋值运算符的一侧而不是在代码中明确提到。

答案 1 :(得分:2)

答案 2 :(得分:2)

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

返回IQueriable<Department>类型的对象,该对象又实现IEnumerable<Department>

在此处使用var关键字时,编译器将其替换为IQueriable<Department>

答案 3 :(得分:1)

我相信在第二种情况下myQuery的类型是IQueryable<Department>而不是IEnumerable。如果您不需要任何特定于IQueryable的内容,而您无法使用IEnumerable,那么它们的行为相同。

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

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

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

答案 4 :(得分:1)

使用var,编译器会推断出myQuery的类型。它最终可能会成为IQueryable<Department>而不是IEnumerable<Department>

答案 5 :(得分:1)

这里唯一的区别是你没有宣称自己是myQuery的类型。您正在利用名为Type Inference的功能。实际上,返回的类型将是IQueryable<Department>,其中第一个语句明确地将变量键入为IEnumerable