友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VB2008从入门到精通(PDF格式英文版)-第192章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




           method is called to return the number of found values。 

                The following sections present examples of using the extension methods with LINQ。 They  

           are in the  LINQExamples project; which is a console application。  



           ■Note  In all of the examples; I have taken shortcuts for simplicity。 So you will see some coding practices  

           that are not remended; such as creating public data members and not using properties。 



           Selecting and Altering Data 



          When running a LINQ query; the data that you filter and manipulate does not need to stay in  

           its original form。 Let’s say that you have a list of customers; and you have identified a set of  

           customers who deserve more loyalty points。 You want to select those customers; increment  

           their points; and then return the list of altered customers。 To do that; you can mix LINQ with  

           the extension methods。 

                Consider the following simplified customer declaration。  



           Class Customer  

               Public Identifier As String 

               Public Points As Integer 

               Public Overrides Function ToString() As String 

                   Return 〃Identifier (〃 & Identifier & 〃) Points (〃 & Points & 〃)〃 

               End Function 

           End Class 



                A list will be created with two customers; where one customer has no points and the other  

           one does。 Here is the source code to create that list: 


…………………………………………………………Page 431……………………………………………………………

                                                                  CH AP T E R   1 5   ■    L E A R N I N G   A B OU T   L I N Q 409 



    Private Function CreateList() As Customer() 

        Return New Customer() { _ 

            New Customer() With {。Identifier = 〃Person 1〃; 。Points = 0}; _ 

            New Customer() With {。Identifier = 〃Person 2〃; 。Points = 10}} 

    End Function  



     The customers that have enough points are selected and rewarded with extra points。 To do  

that; use the following LINQ statement。 



    Function Increment(ByVal pCustomer As Customer; ByVal index As Integer) _ 

      As Customer 

        pCustomer。Points += 5 

        Return pCustomer 

    End Function 



    Sub CountCustomers() 

        Dim points = (From customer In CreateList() _ 

                      Where customer。Points 》 5 _ 

                      Select customer)。Select(AddressOf Increment) 

        Console。WriteLine(〃Count is (〃 & points。Count() & 〃)〃) 

    End Sub 



     The LINQ query is bined with a modification operation。 The LINQ statement that uses  

From; Where; and Select is not new。 New are the parentheses enclosing the LINQ statement。 By  

using a set of parentheses; you are identifying the LINQ statement as an object that references  

a result set。  

     In the example; the method called on the LINQ statement is Select()。 Using the Select()  

method; each item in the result set is iterated and passed as a parameter (pCustomer) to the  

lambda expression (Increment())。 Passed with the item is the index of the item in the list。 The  

role of the lambda expression is to do something with the item and return what should be used as  

a basis for another list。 In the example; an instance of the type Customer is passed in to Increment();  

and an instance of type Customer is passed out。 But before the instance is returned; it is manip

ulated to get an additional five bonus points。  

     What might concern you is that there is no test to check if the customer actually warrants  

earning five bonus points。 That would be a concern if you were not using the LINQ expression。  

The LINQ expression is responsible for filtering out only those customers who should get the  

additional bonus points。 Thus; when the method Select() is called; you are 100% sure that  

only the customers who should get bonus points actually get bonus points。 Think of this as  

building a pipeline of manipulations。 



Selecting with Anonymous Types 



The Select() method and statement are used to generate a result set after finding a particular  

element。 As demonstrated in the previous section; a Select statement is used to generate a new  

result set。 For example; what if you want to find all of the customers who fulfill a certain crite

rion; but do not want to copy all of the associated data? You might want only the customer  

identifier and accumulated points。 To do that; you could modify the Select() part of the LINQ  

statement to return a new type that you declare dynamically。 The following is the previous  

example rewritten to use an anonymous type。 


…………………………………………………………Page 432……………………………………………………………

410       CH AP T E R   1 5   ■    L E A R N I N G   A B OU T   L I N Q 



              Function Increment2(ByVal pCustomer As Customer; ByVal index As Integer) 

                  pCustomer。Points += 5 

                  Return New With {。identifier = pCustomer。Identifier; _ 

                        。points = pCustomer。Points} 

              End Function 



              Sub CountCustomers2() 

                  Dim points = (From customer In CreateList() _ 

                                Where customer。Points 》 5 _ 

                                Select customer)。Select(AddressOf Increment2) 

                  Console。WriteLine(〃Count is (〃 & points。Count() & 〃)〃) 

              End Sub  



               In the example; the Return statement in the  Increment2() method uses the keyword New  

          without a type identifier; but with the syntax of an object initializer。 This is defining an anony

          mous type。 An anonymous type is an object instance that has no explicitly named type。 The  

          anonymous type has properties; but it does not have methods。 

               Anonymous types are useful only in the context of the method in which they are declared。  

          The var
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!