В чем разница между этими двумя утверждениями (asp.net/c#/entity framework) - PullRequest
1 голос
/ 26 мая 2010
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 ]

2 голосов
/ 26 мая 2010
(from D in myContext.Departments orderby D.DeptName select D);

возвращает объект типа IQueriable<Department>, который в свою очередь реализует IEnumerable<Department>

пока вы используете ключевое слово var, компилятор заменит его на IQueriable<Department>

2 голосов
/ 26 мая 2010
2 голосов
/ 26 мая 2010

Второй короче (при условии, что тип D равен Department).

(на самом деле тип возвращаемого запроса может отличаться от IEnumerable, например IQueryable, но дело в том, что тип будет статически выведен с правой стороны присвоения оператор вместо явного упоминания в коде).

1 голос
/ 26 мая 2010

Единственная разница здесь в том, что вы не объявляете себя типом myQuery. Вы используете функцию с именем Вывод типа . В самом деле, возвращаемый тип будет IQueryable<Department>, где первая инструкция явно вводит переменную как IEnumerable.

1 голос
/ 26 мая 2010

С помощью var компилятор выводит тип myQuery. Вероятно, в конечном итоге это будет IQueryable<Department>, а не IEnumerable<Department>.

1 голос
/ 26 мая 2010

Я полагаю, что во втором случае тип myQuery является IQueryable<Department>, а не IEnumerable. Если вам не нужно ничего специфичного для IQueryable, которое вы не можете сделать с IEnumerable, тогда они ведут себя одинаково.

Ключевое слово var просто для удобства, когда компилятор может определить тип, не уточняя его. Так что вместо

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

Вы можете просто написать var myObject = new MyReallyLongGenericClassName<SomeOtherType>();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...