280 likes | 294 Views
Learn the basic concept of LINQ, how to use LINQ to query and sort arrays, and how to manipulate collections using LINQ. Explore the benefits and flexibility of using generic collections like List in C#.
E N D
CSCI 3328 Object Oriented Programming in C# Chapter 8: LINQ and Generic Collections Xiang Lian The University of Texas – Pan American Edinburg, TX 78539 lianx@utpa.edu
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.Collections.Generic • List<int> numbers = new List<int>(); • numbers.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; } }
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
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());
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"); } }