280 likes | 415 Views
CSCI 3328 Object Oriented Programming in C# Chapter 8: LINQ and Generic Collections. UTPA – Fall 2012. Objectives. In this chapter, you will: Become familiar with the basic concept of LINQ Learn how to use LINQ to query an array Learn how to sort an array using LINQ
E N D
CSCI 3328 Object Oriented Programming in C# Chapter 8: LINQ and Generic Collections UTPA – Fall 2012
Objectives • In this chapter, you will: • Become familiar with the basic concept of LINQ • Learn how to use LINQ to query an array • Learn how to sort an array using LINQ • Learn how to manipulate collections (e.g., List) by LINQ
LINQ • Language Integrated Query (LINQ) • Old way: • Structured Query Language (SQL) • Queries are written in string and passed to database which interprets the string, processes the request, and returns the results • LINQ allows a programming language to submit queries directly to a wide range of data sources (not just databases!)
LINQ (cont'd) • LINQ is a logical extension of querying and manipulating data in databases • In C#, you must include namespace System.Linq • using System.Linq • Data sources • Arrays • Collections • Files • Query expression is similar to SQL
Writing an LINQ Query • A LINQ query begins with a from clause • After from clause, specify a range variable and the data source to query • The range variable represents each item in the data source (much like foreach) • E.g., passed = from score in scores • The where clause gives a condition for the search and evaluates to true or false • If true, the value is selected • The select clause determines what value appears in the results • Do not forget semicolon (;) at the end
Querying an Array Using LINQ • var filtered = from value in values where value > 4 select value; • var sorted = from value in filtered orderby value select value; default: ascending
Querying an Array Using LINQ (cont'd) • var sorted = from value in filtered orderby value descending select value; • var sorted = from value in values where (value > 4) orderby value descending select value;
Display the Results • Method call • Display (sorted, "values greater than 4, descending:"); • Method declaration publicstaticvoid Display(IEnumerable <int> results, string header) { Console.Write("{0}", header); foreach (var element in results) Console.Write(" {0}", element); }
Another Example: Querying an Array Using LINQ • To search for scores >=60 var passed = from score in scores where score >= 60 select score; foreach (var score in passed) { ListLINQresult.Items.Add(score); }
Compare Arrays with Collections • You must specify an arrays size • You can resize it in some languages at runtime • .Net framework generic collections gives greater flexibility • Reusable • Reliable • Powerful • Efficient • We are going to use the List class from this collection
Lists • Dynamic resizing • LINQ can be used with different types of data sources, including lists and arrays • SQL is only used with databases • Lists are similar to arrays but provide additional functionality: • Dynamic resizing • Provides many built-in methods • Can use LINQ queries
Collections • Collections do not have a fixed size • Size of a collection is increased automatically when elements are added to it • Collections: lists, sorted lists, queues, stacks and array lists • UnTyped and typed collections • Using System.Collections • ArrayList numbers = new ArrayList(); • numbers.Add(3); • Using System.Colelctions.Generic • List<int> numbers = new List<int>(); • numbrs.Add(3);
Example of List Coding string[] grades = txtEnterGrade.Text.Split(' '); List<int> scores = new List<int>(); int numScores = grades.Length; foreach (string grade in grades) { scores.Add(Convert.ToInt32(grade)); ListBoxGrades.Items.Add(grade); }
Example of List Coding (cont'd) public double standardDeviation(List<int> scores, int numScores) //declaration { int sum=0; foreach (int score in scores) { sum = sum + score; } }
Stack Operation (built-in) Stack<string> students = new Stack<string>(); students.Push("Abbit"); students.Push("Aguero"); students.Push("Castro"); students.Push("Chen"); students.Push("Cruz"); while (students.Count > 0) MessageBox.Show("Popped: " + students.Pop());
Some Methods/Properties of List • .Add • Adds to the end of the list • .Insert • Inserts an element at the specified index • .Clear • Removes all elements from the list • .Remove • Removes the first occurrence of the specified value • .Contains • Returns true if the List contains value • .Sort
Struct – Example public struct Info { publicstring fName; publicstring lName; publicstring Address1; publicstring Address2; publicint zip; publicstring Tele; }
List of Struct public List <Info> friendsList = new List<Info>(); Info onePerson; onePerson.fName=txt_fName.Text; onePerson.lName=txt_lName.Text; onePerson.Address1=txtAddr1.Text; onePerson.Address2=txtAddr2.Text; onePerson.zip=Convert.ToInt32 (txtZip.Text); onePerson.Tele=txtTele.Text; friendsList.Add(onePerson);
LINQ Search for a Last Name in a List //will select every person with that last name var foundTele = from person in friendsList where person.lName==txtSearchName.Text select person;
Display the Selected Names and Telephone Numbers foreach (var person in foundTele) { display +=person.fName+" "+person.lName+"\t"; display += person.Tele + "\n"; } MessageBox.Show(display, "Names and Telephone Nos. Persons searched:");
Select Those with GPA >+ var foundGPA = from person in friendsList where person.GPA>=Convert.ToSingle(txtSearchGPA.Text) select person;
Display foreach (var person in foundGPA) { display += person.fName + " " + person.lName + "\t"; display += person.Tele + "\t"; display += Convert.ToString(person.GPA)+"\n"; } MessageBox.Show(display, "Names and Telephone Nos. Persons searched:")
Obtaining File Name From Chooser OpenFileDialog fDialog = new OpenFileDialog(); if (fDialog.ShowDialog() == DialogResult.OK) { fileName = (fDialog.FileName.ToString()); MessageBox.Show(fileName); }
Reading From a File TextReaderofile = newStreamReader(fileName); while (ofile.Peek()!=-1) { stringoneline = ofile.ReadLine(); MessageBox.Show(oneline,"Reading From File.."); string[] items = oneline.Split(','); onePerson.fName = items[0]; onePerson.lName = items[1]; onePerson.GPA = Convert.ToSingle(items[3]); onePerson.Tele = items[2]; friendsList.Add(onePerson); } ofile.Close();
Writing to the File StreamWriter outfile = new StreamWriter(fileName); foreach (Info person in friendsList) outfile.WriteLine(person.fName+","+person.lName+","+person.Tele+","+Convert.ToString(person.GPA)); outfile.Close();
Example of Employees publicclass Employee { publicstring FirstName; publicstring LastName; publicdecimal monthlySalaryValue; }
Example of Employees (cont'd) publicclassLINQwithArray { Employee [] employee_array; LINQwithArray() { // … initializing arrays } publicvoidLINQ_query() { varnameSorted = (from e inemployee_array wheree.MonthlySalary >= 4000 orderbye.LastName, e.FirstName select e).Distinct(); if (!nameSorted.Any()) Console.WriteLine("not found\n"); } }