14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Посл<strong>е</strong>доват<strong>е</strong>льностью называ<strong>е</strong>тся<br />

упорядоч<strong>е</strong>нный набор объ<strong>е</strong>ктов или<br />

знач<strong>е</strong>ний, которы<strong>е</strong> LINQ возвраща--<br />

<strong>е</strong>т в 1Епит<strong>е</strong>гаЫ<strong>е</strong>.<br />

Сохранит<strong>е</strong> р<strong>е</strong>зультат в вид<strong>е</strong> посл<strong>е</strong>доват<strong>е</strong>льности<br />

И н о гд а н у ж н о , ч т о б ы р<strong>е</strong>зультаты в ы п о л н <strong>е</strong> н и я запроса<br />

L IN Q б ы л и под руко й . В оспользу<strong>е</strong>м ся для э то го<br />

ком андой T o L i s t ( ) :<br />

v a r u n d e r S O s o r t e d =<br />

f r o m n u m b e r in l i s t O f N u m b e r s<br />

w h e r e n u m b e r < 50<br />

o r d e r b y n u m b e r d e s c e n d i n g<br />

s e l e c t n u m b e r ;<br />

f-ia этот<br />

раз числа<br />

сортируюі^ся<br />

no убыванию.<br />

L i s t < i n t > n e w L i s t = u n d e r S O s o r t e d . T o L i s t О ;<br />

Запросы LINQ н<strong>е</strong> выполняются<br />

заран<strong>е</strong><strong>е</strong>!<br />

^удып<strong>е</strong><br />

оСГ11ор*оЖНь11 Это называ<strong>е</strong>тся<br />

«отлож<strong>е</strong>нными вычисл<strong>е</strong>ниями»<br />

— сначала долж<strong>е</strong>н<br />

сработать оп<strong>е</strong>ратор, использующий<br />

р<strong>е</strong>зультаты<br />

запроса. Поэтому так важ<strong>е</strong>н<br />

м<strong>е</strong>тод ToListQ — он заставля<strong>е</strong>т<br />

LINQ н<strong>е</strong>м<strong>е</strong>дл<strong>е</strong>нно выполнить<br />

запрос.<br />

LINQ<br />

С п о м о щ ь ю м <strong>е</strong>тода Т а к <strong>е</strong> () м о ж н о<br />

сф о р м и р овать п о д м н о ж <strong>е</strong> ств о р<strong>е</strong>зультатов:<br />

■.<br />

v a r f i r s t F i v e = u n d e r S O s o r t e d . T a k e ( б ) ;<br />

L i s t < i n t > s h o r t L i s t = f i r s t F i v e . T o L is tO ;<br />

f o r e a c h (int n in s h o r t L i s t )<br />

C o n s o l e . W r i t e L i n e ( n ) ;<br />

Пос<strong>е</strong>тит<strong>е</strong> Официальную страницу 101 L IN Q Samples от Microsoft<br />

Зд<strong>е</strong>сь вы найд <strong>е</strong>т<strong>е</strong> д о п о л н и т<strong>е</strong> л ь н ы <strong>е</strong> м ат<strong>е</strong>риалы п о работ<strong>е</strong> с L IN Q :<br />

h t t p : / / m s d n 2 . m i c r o s o f t . c o m / e n - u s / v c s h a r p / a a 3 3 6 7 4 6 . a s p x<br />

Так много новых слов: from ,<br />

w here, o r d e r b y , s e le c t . . . как<br />

будто сов<strong>е</strong>рш<strong>е</strong>нно другой язык. Поч<strong>е</strong>му<br />

он так отлича<strong>е</strong>тся от С#?<br />

I; Потому что он служит другой ц<strong>е</strong>ли,<br />

ольшая часть синтаксиса <strong>C#</strong> пр<strong>е</strong>дназнач<strong>е</strong>на<br />

для выполн<strong>е</strong>ния одной н<strong>е</strong>большой<br />

оп<strong>е</strong>рации за один раз. Можно начать цикл,<br />

присвоить знач<strong>е</strong>ни<strong>е</strong> п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной, произв<strong>е</strong>сти<br />

мат<strong>е</strong>матич<strong>е</strong>ский расч<strong>е</strong>т или вызвать<br />

м<strong>е</strong>тод... вс<strong>е</strong> это будут <strong>е</strong>диничны<strong>е</strong> оп<strong>е</strong>рации.<br />

Единичный ж<strong>е</strong> запрос LINQ мож<strong>е</strong>т выполнять<br />

ц<strong>е</strong>лый ряд функций. Рассмотрим<br />

прим<strong>е</strong>р:<br />

4acm°<br />

ЧаДаБа<strong>е</strong>Мы<strong>е</strong><br />

B o I I p o C jji<br />

v a r u n d e r lO =<br />

f r o m n u m b e r i n n u m b e r A r r a y<br />

w h e r e n u m b e r < 10<br />

s e l e c t n u m b e r ;<br />

Н<strong>е</strong>смотря на кажущуюся простоту, это<br />

довольно сложный кусок кода. Подумайт<strong>е</strong>,<br />

сколько д<strong>е</strong>йствий должна сов<strong>е</strong>ршить<br />

программа для выбора из массива<br />

n u m b e r A r r a y вс<strong>е</strong>х эл<strong>е</strong>м<strong>е</strong>нтов, н<strong>е</strong><br />

пр<strong>е</strong>вышающих 10. Нужно циклич<strong>е</strong>ски<br />

просмотр<strong>е</strong>ть массив, сравнить каждый<br />

<strong>е</strong>го эл<strong>е</strong>м<strong>е</strong>нт с 10 и выв<strong>е</strong>сти р<strong>е</strong>зультат<br />

в форм<strong>е</strong>, пригодной для дальн<strong>е</strong>йш<strong>е</strong>го<br />

прим<strong>е</strong>н<strong>е</strong>ния.<br />

Им<strong>е</strong>нно поэтому LINQ выглядит так странно<br />

с точки зр<strong>е</strong>ния С#. В<strong>е</strong>дь многочисл<strong>е</strong>нным<br />

оп<strong>е</strong>рациям соотв<strong>е</strong>тству<strong>е</strong>т совс<strong>е</strong>м<br />

короткая запись.<br />

LINQ, позволя<strong>е</strong>т<br />

коротко писать<br />

оч<strong>е</strong>нь сложны<strong>е</strong><br />

запросы.<br />

дальш<strong>е</strong> > 679

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!