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