亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語(yǔ)言

c#關(guān)鍵字查詢之select 子句運(yùn)用

時(shí)間:2024-10-06 22:48:02 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

c#關(guān)鍵字查詢之select 子句運(yùn)用

引導(dǎo)語(yǔ):在計(jì)算機(jī)中,select語(yǔ)句是最常用的數(shù)據(jù)查詢語(yǔ)句。以下是小編整理的c#關(guān)鍵字查詢之select 子句運(yùn)用,歡迎參考閱讀!

  在查詢表達(dá)式中,select 子句可以指定將在執(zhí)行查詢時(shí)產(chǎn)生的值的類型。該子句的結(jié)果將基于前面所有子句的計(jì)算結(jié)果以及 select 子句本身中的所有表達(dá)式。查詢表達(dá)式必須以 select 子句或 group 子句結(jié)束。

  下面的示例演示了查詢表達(dá)式中的簡(jiǎn)單 select 子句。

  C#  

  class SelectSample1

  {

  static void Main()

  {

  //Create the data source

  List<int> Scores = new List<int>() { 97, 92, 81, 60 };

  // Create the query.

  IEnumerable<int> queryHighScores =

  from score in Scores

  where score > 80

  select score;

  // Execute the query.

  foreach (int i in queryHighScores)

  {

  Console.Write(i + " ");

  }

  }

  }

  //Output: 97 92 81

  select 子句產(chǎn)生的序列的類型決定了查詢變量 queryHighScores 的類型。在最簡(jiǎn)單的情況下,select 子句僅指定范圍變量。這會(huì)使返回的序列包含與數(shù)據(jù)源具有相同類型的元素。有關(guān)更多信息,請(qǐng)參見(jiàn)查詢操作中的類型關(guān)系 (LINQ)。不過(guò),select 子句還提供了一種功能強(qiáng)大的機(jī)制,可用于將源數(shù)據(jù)轉(zhuǎn)換(或投影)為新類型。有關(guān)更多信息,請(qǐng)參見(jiàn)使用 LINQ 進(jìn)行數(shù)據(jù)轉(zhuǎn)換。

  示例

  下面的示例演示了 select 子句可能采用的所有不同形式。在每個(gè)查詢中,請(qǐng)注意 select 子句和查詢變量(studentQuery1、studentQuery2 等)的類型之間的關(guān)系。

  C#  

  class SelectSample2

  {

  // Define some classes

  public class Student

  {

  public string First { get; set; }

  public string Last { get; set; }

  public int ID { get; set; }

  public List<int> Scores;

  public ContactInfo GetContactInfo(SelectSample2 app, int id)

  {

  ContactInfo cInfo =

  (from ci in app.contactList

  where ci.ID == id

  select ci)

  .FirstOrDefault();

  return cInfo;

  }

  public override string ToString()

  {

  return First + " " + Last + ":" + ID;

  }

  }

  public class ContactInfo

  {

  public int ID { get; set; }

  public string Email { get; set; }

  public string Phone { get; set; }

  public override string ToString() { return Email + "," + Phone; }

  }

  public class ScoreInfo

  {

  public double Average { get; set; }

  public int ID { get; set; }

  }

  // The primary data source

  List<Student> students = new List<Student>()

  {

  new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List<int>() {97, 92, 81, 60}},

  new Student {First="Claire", Last="O'Donnell", ID=112, Scores= new List<int>() {75, 84, 91, 39}},

  new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List<int>() {88, 94, 65, 91}},

  new Student {First="Cesar", Last="Garcia", ID=114, Scores= new List<int>() {97, 89, 85, 82}},

  };

  // Separate data source for contact info.

  List<ContactInfo> contactList = new List<ContactInfo>()

  {

  new ContactInfo {ID=111, Email="SvetlanO@Contoso.com", Phone="206-555-0108"},

  new ContactInfo {ID=112, Email="ClaireO@Contoso.com", Phone="206-555-0298"},

  new ContactInfo {ID=113, Email="SvenMort@Contoso.com", Phone="206-555-1130"},

  new ContactInfo {ID=114, Email="CesarGar@Contoso.com", Phone="206-555-0521"}

  };

  static void Main(string[] args)

  {

  SelectSample2 app = new SelectSample2();

  // Produce a filtered sequence of unmodified Students.

  IEnumerable<Student> studentQuery1 =

  from student in app.students

  where student.ID > 111

  select student;

  Console.WriteLine("Query1: select range_variable");

  foreach (Student s in studentQuery1)

  {

  Console.WriteLine(s.ToString());

  }

  // Produce a filtered sequence of elements that contain

  // only one property of each Student.

  IEnumerable<String> studentQuery2 =

  from student in app.students

  where student.ID > 111

  select student.Last;

  Console.WriteLine(" studentQuery2: select range_variable.Property");

  foreach (string s in studentQuery2)

  {

  Console.WriteLine(s);

  }

  // Produce a filtered sequence of objects created by

  // a method call on each Student.

  IEnumerable<ContactInfo> studentQuery3 =

  from student in app.students

  where student.ID > 111

  select student.GetContactInfo(app, student.ID);

  Console.WriteLine(" studentQuery3: select range_variable.Method");

  foreach (ContactInfo ci in studentQuery3)

  {

  Console.WriteLine(ci.ToString());

  }

  // Produce a filtered sequence of ints from

  // the internal array inside each Student.

  IEnumerable<int> studentQuery4 =

  from student in app.students

  where student.ID > 111

  select student.Scores[0];

  Console.WriteLine(" studentQuery4: select range_variable[index]");

  foreach (int i in studentQuery4)

  {

  Console.WriteLine("First score = {0}", i);

  }

  // Produce a filtered sequence of doubles

  // that are the result of an expression.

  IEnumerable<double> studentQuery5 =

  from student in app.students

  where student.ID > 111

  select student.Scores[0] * 1.1;

  Console.WriteLine(" studentQuery5: select expression");

  foreach (double d in studentQuery5)

  {

  Console.WriteLine("Adjusted first score = {0}", d);

  }

  // Produce a filtered sequence of doubles that are

  // the result of a method call.

  IEnumerable<double> studentQuery6 =

  from student in app.students

  where student.ID > 111

  select student.Scores.Average();

  Console.WriteLine(" studentQuery6: select expression2");

  foreach (double d in studentQuery6)

  {

  Console.WriteLine("Average = {0}", d);

  }

  // Produce a filtered sequence of anonymous types

  // that contain only two properties from each Student.

  var studentQuery7 =

  from student in app.students

  where student.ID > 111

  select new { student.First, student.Last };

  Console.WriteLine(" studentQuery7: select new anonymous type");

  foreach (var item in studentQuery7)

  {

  Console.WriteLine("{0}, {1}", item.Last, item.First);

  }

  // Produce a filtered sequence of named objects that contain

  // a method return value and a property from each Student.

  // Use named types if you need to pass the query variable

  // across a method boundary.

  IEnumerable<ScoreInfo> studentQuery8 =

  from student in app.students

  where student.ID > 111

  select new ScoreInfo

  {

  Average = student.Scores.Average(),

  ID = student.ID

  };

  Console.WriteLine(" studentQuery8: select new named type");

  foreach (ScoreInfo si in studentQuery8)

  {

  Console.WriteLine("ID = {0}, Average = {1}", si.ID, si.Average);

  }

  // Produce a filtered sequence of students who appear on a contact list

  // and whose average is greater than 85.

  IEnumerable<ContactInfo> studentQuery9 =

  from student in app.students

  where student.Scores.Average() > 85

  join ci in app.contactList on student.ID equals ci.ID

  select ci;

  Console.WriteLine(" studentQuery9: select result of join clause");

  foreach (ContactInfo ci in studentQuery9)

  {

  Console.WriteLine("ID = {0}, Email = {1}", ci.ID, ci.Email);

  }

  // Keep the console window open in debug mode

  Console.WriteLine("Press any key to exit.");

  Console.ReadKey();

  }

  }

  /* Output

  Query1: select range_variable

  Claire O'Donnell:112

  Sven Mortensen:113

  Cesar Garcia:114

  studentQuery2: select range_variable.Property

  O'Donnell

  Mortensen

  Garcia

  studentQuery3: select range_variable.Method

  ClaireO@Contoso.com,206-555-0298

  SvenMort@Contoso.com,206-555-1130

  CesarGar@Contoso.com,206-555-0521

  studentQuery4: select range_variable[index]

  First score = 75

  First score = 88

  First score = 97

  studentQuery5: select expression

  Adjusted first score = 82.5

  Adjusted first score = 96.8

  Adjusted first score = 106.7

  studentQuery6: select expression2

  Average = 72.25

  Average = 84.5

  Average = 88.25

  studentQuery7: select new anonymous type

  O'Donnell, Claire

  Mortensen, Sven

  Garcia, Cesar

  studentQuery8: select new named type

  ID = 112, Average = 72.25

  ID = 113, Average = 84.5

  ID = 114, Average = 88.25

  studentQuery9: select result of join clause

  ID = 114, Email = CesarGar@Contoso.com

  */

  如上一個(gè)示例中的 studentQuery8 所示,您有時(shí)可能希望所返回序列中的元素僅包含源元素的屬性子集。通過(guò)使返回的序列盡可能地小一些,可以降低內(nèi)存需求,并提高查詢的執(zhí)行速度。通過(guò)在 select 子句中創(chuàng)建一個(gè)匿名類型,并且借助于對(duì)象初始值設(shè)定項(xiàng)用源元素中的適當(dāng)屬性對(duì)該匿名類型進(jìn)行初始化,可以達(dá)到此目的。


【c#關(guān)鍵字查詢之select 子句運(yùn)用】相關(guān)文章:

c#查詢關(guān)鍵字之group子句的使用09-07

java之this關(guān)鍵字用法事例解析10-11

C#數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表的實(shí)例代碼10-22

職稱英語(yǔ)成績(jī)查詢之合格標(biāo)準(zhǔn)06-02

淺談C#語(yǔ)言的特點(diǎn)11-01

java關(guān)鍵字復(fù)習(xí)09-25

C語(yǔ)言關(guān)鍵字08-31

關(guān)鍵字register分析07-24

Java編程中this關(guān)鍵字與super關(guān)鍵字的使用方法08-23

PHP中this關(guān)鍵字06-08