Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks.. Where those designations appear in this book, and the publisher was a
Trang 2U SING AND E XTENDING LINQ TO
O BJECTS AND P ARALLEL LINQ (PLINQ)
Troy Magennis
Upper Saddle River, NJ • Boston • Indianapolis • San Francisco
New York • Toronto • Montreal • London • Munich • Paris • Madrid
Capetown • Sydney • Tokyo • Singapore • Mexico City
Trang 3Many of the designations used by manufacturers and sellers to distinguish their products are claimed
as trademarks Where those designations appear in this book, and the publisher was aware of a
trade-mark claim, the designations have been printed with initial capital letters or in all capitals
The author and publisher have taken care in the preparation of this book, but make no expressed or
implied warranty of any kind and assume no responsibility for errors or omissions No liability is
assumed for incidental or consequential damages in connection with or arising out of the use of the
information or programs contained herein
The publisher offers excellent discounts on this book when ordered in quantity for bulk purchases or
special sales, which may include electronic versions and/or custom covers and content particular to
your business, training goals, marketing focus, and branding interests For more information, please
contact:
U.S Corporate and Government Sales
(800) 382-3419
corpsales@pearsontechgroup.com
For sales outside the United States please contact:
International Sales
international@pearson.com
Visit us on the Web: informit.com/aw
Library of Congress Cataloging-in-Publication Data:
Magennis, Troy,
1970-LINQ to objects using C# 4.0 : using and extending 1970-LINQ to objects and parallel 1970-LINQ (P1970-LINQ) /
Troy Magennis
p cm
Includes bibliographical references and index
ISBN 978-0-321-63700-0 (pbk : alk paper) 1 Microsoft LINQ 2 Query languages (Computer
sci-ence) 3 C#
(Computer program language) 4 Microsoft NET Framework I Title
QA76.73.L228M345 2010
006.7’882—dc22
2009049530 Copyright © 2010 Pearson Education, Inc
All rights reserved Printed in the United States of America This publication is protected by copyright,
and permission must be obtained from the publisher prior to any prohibited reproduction, storage in a
retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying,
recording, or likewise For information regarding permissions, write to:
Pearson Education, Inc
Rights and Contracts Department
501 Boylston Street, Suite 900
Boston, MA 02116
Fax (617) 671 3447
ISBN-13: 978-0-321-63700-0
ISBN-10: 0-321-63700-3
Text printed in the United States on recycled paper at RR Donnelly in Crawfordsville, Indiana
First printing March 2010
Trang 4To my wife, Janet Doherty, for allowing me to spend those
extra hours tapping away on the keyboard; thank you for
your support and love.
Trang 5This page intentionally left blank
Trang 6Query Expressions, 29-30
query operators, 121
aggregation operators
Aggregate operator, 123-125
Average operator, 126-129
Count operator, 129-131
LongCount operator,
129-131
Max operator, 126-129
Min operator, 126-129
Sum operator, 126-129
writing, 216-222
conversion operators
AsEnumerable, 133
Cast, 133-134
OfType, 134-136
ToArray, 136
ToDictionary, 136-139
ToList, 140
ToLookup, 140-143
element operators
DefaultlfEmpty, 144-145
ElementAt, 145-147
ElementAtOrDefault,
145-147
First, 147-149
FirstOrDefault, 147-149
Last, 149-151
LastOrDefault, 149-151
Single, 151-153
SingleOrDefault, 151-153
grouping operators, writing,
222-232
sequence operators
TakeRange, building,
210-216
writing, 208-216
single element operators,
writing, 196-208
R
race conditions, 265-266
RandomElement operator,
building, 201-208
Range operator, 156-158
range partitioning, 277
Repeat operator, 158-159
Index 311
return type, changing, 54 anonymous type, returning, 58-59
different type as source, returning, 56-58 grouped objects, returning, 59 same type as source,
returning, 56 single result value, returning, 55 returning sequenced elements with SelectMany operator, 59-61 reversing query result order, 65 row iterator, building in Microsoft Excel, 256-260 Rusina, Alexandra, 200
S
Segment operator, building, 226-232
selecting query syntax, 42 selection projections query return type, changing, 54-55
anonymous type, returning, 58-59
different type as source, returning, 56-58 grouped objects, returning, 59 same type as source, returning, 56 single result value, returning, 55 SelectMany operator, 59-61 sequence operators TakeRange, building, 210-216 writing, 208-216
SequenceEqual operator, 154-155
sequences returning, 59-61 single element operators Last, building, 196-201 RandomElement, building, 201-208
writing, 196-208
Single operator, 151-153 SingleOrDefault operator, 151-153
one-to-one joins, 105-106 Skip operator, 161-162 SkipWhile operator, 163-164 sorting query results case in-sensitive string ordering, 65-67 cultural-specific string ordering, 65-67 custom sort comparison functions, specifying, 67-72
reversing result sequence, 65 syntax, 63-64
Soundex equality operator, building, 84-87 Standard Query Operators, 14 striped partitioning, 278 subqueries
one-to-many joins, performing, 115-116
one-to-one joins, performing, 104-105
Sum operator, 126, 128-129 summarizing data from two collections, comparing LINQ and C# 2.0 approaches, 8-12 synchronization, 269 syntax
LINQ to Objects query examples, 30-38 queries
choosing, 42 methods, comparing, 45-49 query expression format, 43-45
results, sorting, 63-64
T
Take operator, 161-162 TakeRange operator, building, 210-216
TakeWhile operator, 163-164 ternary operators, 79
Trang 7testing Parallel LINQ operators,
295-297
this modifier, 18
thread-level parallelism, 264
threading, 264
ToArray operator, 136
ToDictionary operator, 136-139
ToList operator, 140
ToLookup operator, 140-143
one-to-many joins, performing,
116-117
Toub, Stephen, 278
two-source operators, 287-289
U–V
Union operator, 181-183
unstable sorting types, 64
Visual Studio, adding
COM-Interop interfaces,
255-256
W
Where clause
query expression syntax, 51
query results, filtering, 49-50
by index position, 53-54
deferred execution, 51
with external method for
evaluation, 52-53
writing
grouping operators, 222-232
Min Operator, 216-219
Parallel LINQ operators,
289-294
query operators, grouping
operators, 222-232
sequence operators, 208-216
single element operators,
196-208
XML, comparing LINQ and
C# 2.0 and 3.0
approaches, 8-12
312 Index
X–Y–Z
XML, comparing LINQ and C# 2.0 writing approaches, 8-12 Zip operator, 159-160