繁体   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