小牛电子书 > 其他电子书 > VB2008从入门到精通(PDF格式英文版) >

第139章

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

小说: VB2008从入门到精通(PDF格式英文版) 字数: 每页3500字

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




         Write a console application that populates the draws table using a lottery file。 Write a  

         console application that dumps the contents of the draws table as a lottery file。  



     2。  Create a console application that accepts as mand…line arguments a winner and  

         the date of the draw。 Your console application must account for doubles and populate  

         both the persons and winners tables。 


…………………………………………………………Page 416……………………………………………………………


…………………………………………………………Page 417……………………………………………………………

C  H  A  P  T  E  R     1  5 



■ ■ ■ 



Learning About LINQ 



In the previous chapter; you learned about how to access a database using the traditional  

ADO technologies。 When you make ADO requests; you are making SQL calls and  

organizing the result set data using SQL。  

     Language Integrated Query (LINQ) is a technology that lets you organize your results in a  

consistent manner; regardless of the underlying source of the data。 Why yet another technology  

to query information? The answer is related to XML。 

     XML is a technology used to represent information in a hierarchical manner。 You saw an  

example of XML in Chapter 12。 XML has solved many problems in an elegant and understand

able manner。 One of the solutions proposed by XML is the ability to reference information in  

an XML structure with XPath; which is a way of referencing an object structure using a set of  

filters。 Using XPath; you can find any node; and the filters can include the presence of depen

dent elements; which is not easily possible in other technologies。 Put simply; XPath and XML  

are very powerful techniques used to find information。 

     You can consider XML and XPath as inspiration for LINQ。 Where LINQ and XML XPath  

deviate is that LINQ can be used to query Visual Basic collection objects; XML documents; and  

relational databases。 Think of LINQ as a general mechanism used to search a collection of  

information。 The focus of this chapter will be to explain the mechanics of LINQ; and demon

strate how to write queries and use the methods associated with the LINQ library。  



Finding the Frequency of Winning Numbers 



The lottery application we’ve been working with in previous chapters collects information  

about lottery drawings to predict the next set of winning lottery numbers。 The idea is to find  

patterns。 Again; the reality is that lottery drawings are random; so even if you could identify  

patterns; that wouldn’t mean you could predict winning numbers。 However; what is interesting  

about this problem is that you can use LINQ to slice and dice the data。 LINQ lets you keep the  

data as objects; and to perform SQLand XPath…like operations; as you’ll see in this chapter。  

     In Chapter 10; you saw a streaming architecture; where a console application read in text  

data and spat out text data。 You also saw examples of text…to…binary and binary…to…text conver

sions。 The application in this chapter (in the FrequencyProcessor project) will read in text; process  

the data; and then generate text describing the frequency of lottery numbers。 Thus; we need to  

use the text…to…text interface; which was defined in Chapter 10 as follows: 



                                                                                                            395 


…………………………………………………………Page 418……………………………………………………………

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



           Public Interface IProcessor  

              Function Process(ByVal input As String) As String 

           End Interface 



                The input is a text stream that looks like this: 



           2006。03。11 3 7 15 28 30 38 44 

           2006。03。15 10 18 30 34 41 43 5 

           2006。03。18 3 11 12 16 20 40 9 

           2006。03。22 2 3 7 13 42 43 41 

           2006。03。25 3 10 36 40 43 44 35 

           2006。03。29 3 4 8 16 34 39 45 



                If you want to find the frequency of the individual numbers; you could parse each individual  

          number; and then increment the count of the individual number as an array; like this:  



           Dim frequency As Integer = 0 

           Dim splitUpText() As String = lineOfText。Split(New Char() {〃 〃c}) 

           frequency(Integer。Parse(splitUpText(0))) += 1 

           frequency(Integer。Parse(splitUpText(1))) += 1 

           。 。 。 



                The split line of text contains the list of numbers; separated by spaces; which is then converted  

          to a series of numbers; each of which is used as an index for the frequency。 The solution is fast  

           and works; but it has a big problem: it is not extendable。 The solution solves a single problem  

           and only a single problem。 

                For example; let’s say that you want to figure out other statistical information; such as which  

          numeric binations occur most often。 Using the previous solution; that would require  

          reparsing the text stream again。 That is an expensive and tedious solution。 The better solution  

          would be to convert the stream into a series of objects that could be processed。 

                However; the problem at hand is calculating the frequency of individual numbers。 So why  

           exert the extra effort if the solution that solves the single problem works? Writing good code  

          means solving problems using a generic but specific approach。 You want to write specific code  

           so that you do not get bogged down in thinking about details in the future; and you want to  

          write generic code so that any future requirement does not cause you to pletely rewrite the  

           old application。 Knowing when to write specific code and when to write generic code is really  

           a matter of experience—the only way to learn is to write code。 



           Extending the Lottery…Prediction System 



           In Chapter 10; the IProcessor interface was a good first step because it solved the problem at  

          hand。 The problem was to convert each line of text into another line of text。 However; in this  

           chapter’s example; that interface is not enough。 We need to add two other methods: Initialize()  

           and Destroy()。 

                We want to find the frequencies of an individual number in the drawn lotteries。 The orig

          inal interface method IProcessor。Process() is used to process an individual line of text; and  

          the frequencies can be calculated only after all of the draws have been processed。 Thus; we add  

           Destroy(); which is called after all of the lines of text have been read。 mon coding convention  


…………………………………………………………Page 419……………………………………………………………

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



says that if you have a Destroy() method; you should have an  Initialize() method that is  

called before the lines of text are processed。 

     Having extra requirements is not a problem and is fairly mon。 But you want to add the  

extra requirements without disrupting existing functionality。 After all; if some code works; you  

don’t want to break it because of additional requirements。 Thus; you don’t want to add the  

methods to the IProcessor interface like this: 



Public Interface IProcessor  

    Function Initialize() As String 

    Function Destroy() As String 

    Function Process(ByVal input As String) As String 

End Interface 



     This code is a no…no because you are breaking existing functionality。 Any class that imple

ments IProcessor must now implement the methods  Initialize() and Destroy(); even though  

those classes don’t need those methods。 

     Thus; when adding requirements; you should not change existing interfaces。 You create  

new interfaces and subclass the existing interfaces; like

返回目录 上一页 下一页 回到顶部 2 2

你可能喜欢的