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