. Стиллмен, Дж. Грин - Изучаем 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