網站首頁 語言 會計 互聯網計算機 醫學 學歷 職場 文藝體育 範文
當前位置:學識谷 > 計算機 > C語言

c#關鍵字查詢之select 子句運用

欄目: C語言 / 發佈於: / 人氣:2.71W

引導語:在計算機中,select語句是最常用的數據查詢語句。以下是小編整理的c#關鍵字查詢之select 子句運用,歡迎參考閲讀!

c#關鍵字查詢之select 子句運用

在查詢表達式中,select 子句可以指定將在執行查詢時產生的值的類型。該子句的結果將基於前面所有子句的計算結果以及 select 子句本身中的所有表達式。查詢表達式必須以 select 子句或 group 子句結束。

下面的示例演示了查詢表達式中的簡單 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)

{

e(i + " ");

}

}

}

//Output: 97 92 81

select 子句產生的序列的類型決定了查詢變量 queryHighScores 的類型。在最簡單的.情況下,select 子句僅指定範圍變量。這會使返回的序列包含與數據源具有相同類型的元素。有關更多信息,請參見查詢操作中的類型關係 (LINQ)。不過,select 子句還提供了一種功能強大的機制,可用於將源數據轉換(或投影)為新類型。有關更多信息,請參見使用 LINQ 進行數據轉換。

  示例

下面的示例演示了 select 子句可能採用的所有不同形式。在每個查詢中,請注意 select 子句和查詢變量(studentQuery1、studentQuery2 等)的類型之間的關係。

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 actList

where == id

select ci)

tOrDefault();

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, ", Phone="206-555-0108"},

new ContactInfo {ID=112, ", Phone="206-555-0298"},

new ContactInfo {ID=113, ", Phone="206-555-1130"},

new ContactInfo {ID=114, ", 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 ents

where > 111

select student;

eLine("Query1: select range_variable");

foreach (Student s in studentQuery1)

{

eLine(ring());

}

// Produce a filtered sequence of elements that contain

// only one property of each Student.

IEnumerable<String> studentQuery2 =

from student in ents

where > 111

select ;

eLine(" studentQuery2: select range_erty");

foreach (string s in studentQuery2)

{

eLine(s);

}

// Produce a filtered sequence of objects created by

// a method call on each Student.

IEnumerable<ContactInfo> studentQuery3 =

from student in ents

where > 111

select ontactInfo(app, );

eLine(" studentQuery3: select range_od");

foreach (ContactInfo ci in studentQuery3)

{

eLine(ring());

}

// Produce a filtered sequence of ints from

// the internal array inside each Student.

IEnumerable<int> studentQuery4 =

from student in ents

where > 111

select es[0];

eLine(" studentQuery4: select range_variable[index]");

foreach (int i in studentQuery4)

{

eLine("First score = {0}", i);

}

// Produce a filtered sequence of doubles

// that are the result of an expression.

IEnumerable<double> studentQuery5 =

from student in ents

where > 111

select es[0] * 1.1;

eLine(" studentQuery5: select expression");

foreach (double d in studentQuery5)

{

eLine("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 ents

where > 111

select age();

eLine(" studentQuery6: select expression2");

foreach (double d in studentQuery6)

{

eLine("Average = {0}", d);

}

// Produce a filtered sequence of anonymous types

// that contain only two properties from each Student.

var studentQuery7 =

from student in ents

where > 111

select new { t, };

eLine(" studentQuery7: select new anonymous type");

foreach (var item in studentQuery7)

{

eLine("{0}, {1}", , t);

}

// 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 ents

where > 111

select new ScoreInfo

{

Average = age(),

ID =

};

eLine(" studentQuery8: select new named type");

foreach (ScoreInfo si in studentQuery8)

{

eLine("ID = {0}, Average = {1}", , age);

}

// 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 ents

where age() > 85

join ci in actList on equals

select ci;

eLine(" studentQuery9: select result of join clause");

foreach (ContactInfo ci in studentQuery9)

{

eLine("ID = {0}, Email = {1}", , l);

}

// Keep the console window open in debug mode

eLine("Press any key to exit.");

Key();

}

}

/* Output

Query1: select range_variable

Claire O'Donnell:112

Sven Mortensen:113

Cesar Garcia:114

studentQuery2: select range_erty

O'Donnell

Mortensen

Garcia

studentQuery3: select range_od

,206-555-0298

,206-555-1130

,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 =

*/

如上一個示例中的 studentQuery8 所示,您有時可能希望所返回序列中的元素僅包含源元素的屬性子集。通過使返回的序列儘可能地小一些,可以降低內存需求,並提高查詢的執行速度。通過在 select 子句中創建一個匿名類型,並且藉助於對象初始值設定項用源元素中的適當屬性對該匿名類型進行初始化,可以達到此目的。