sqlce wp from查询语句详解
http://msdn.microsoft.com/zh-cn/library/bb383978(v=vs.110).aspx
from 子句(C# 參考)
Visual Studio 2012 其他版本[本文檔僅供預(yù)覽,在以后的發(fā)行版中可能會(huì)發(fā)生更改。包含的空白主題用作占位符。]
查詢表達(dá)式必須以?from?子句開頭。?另外,查詢表達(dá)式還可以包含子查詢,子查詢也是以?from?子句開頭。?from?子句指定以下內(nèi)容:
-
將對(duì)其運(yùn)行查詢或子查詢的數(shù)據(jù)源。
-
一個(gè)本地范圍變量,表示源序列中的每個(gè)元素。
范圍變量和數(shù)據(jù)源都是強(qiáng)類型。?from?子句中引用的數(shù)據(jù)源的類型必須為?IEnumerable、IEnumerable<T>?或一種派生類型(如?IQueryable<T>)。
在下面的示例中,numbers?是數(shù)據(jù)源,而?num?是范圍變量。?請(qǐng)注意,這兩個(gè)變量都是強(qiáng)類型,即使使用了?var?關(guān)鍵字也是如此。
C#class LowNums
{static void Main(){ // A simple data source.int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };// Create the query.// lowNums is an IEnumerable<int>var lowNums = from num in numberswhere num < 5select num;// Execute the query.foreach (int i in lowNums){Console.Write(i + " ");}}
}
// Output: 4 1 3 2 0 范圍變量 如果數(shù)據(jù)源實(shí)現(xiàn)了?IEnumerable<T>,則編譯器可以推斷范圍變量的類型。?例如,如果數(shù)據(jù)源的類型為?IEnumerable<Customer>,則推斷出范圍變量的類型為?Customer。?僅當(dāng)數(shù)據(jù)源是非泛型?IEnumerable?類型(如?ArrayList)時(shí),才必須顯式指定數(shù)據(jù)源類型。?有關(guān)更多信息,請(qǐng)參見?如何:使用 LINQ 查詢 ArrayList。
在上一個(gè)示例中,num?被推斷為?int?類型。?由于范圍變量是強(qiáng)類型,因此可以對(duì)其調(diào)用方法或者在其他操作中使用它。?例如,可以不編寫?select num,而編寫?select num.ToString()?使查詢表達(dá)式返回一個(gè)字符串序列而不是整數(shù)序列。?或者,也可以編寫?select n + 10?使表達(dá)式返回序列 14、11、13、12、10。?有關(guān)更多信息,請(qǐng)參見?select 子句(C# 參考)。
范圍變量類似于?foreach?語句中的迭代變量,只是兩者之間有一個(gè)非常重要的區(qū)別:范圍變量從不實(shí)際存儲(chǔ)來自數(shù)據(jù)源的數(shù)據(jù)。?范圍變量只是提供了語法上的便利,使查詢能夠描述執(zhí)行查詢時(shí)將發(fā)生的事情。?有關(guān)更多信息,請(qǐng)參見LINQ 查詢簡(jiǎn)介 (C#)。
復(fù)合 from 子句在某些情況下,源序列中的每個(gè)元素本身可能是序列,也可能包含序列。?例如,數(shù)據(jù)源可能是一個(gè)?IEnumerable<Student>,其中,序列中的每個(gè) Student 對(duì)象都包含一個(gè)測(cè)驗(yàn)得分列表。?若要訪問每個(gè)?Student?元素中的內(nèi)部列表,可以使用復(fù)合?from?子句。?該技術(shù)類似于使用嵌套的?foreach?語句。?可以向任一?from?子句中添加?where?或?orderby?子句來篩選結(jié)果。?下面的示例演示了一個(gè)?Student?對(duì)象序列,其中每個(gè)對(duì)象都包含一個(gè)表示測(cè)驗(yàn)得分的內(nèi)部整數(shù)List。?為了訪問該內(nèi)部列表,此示例使用了復(fù)合?from?子句。?如有必要,可在兩個(gè)?from?子句之間再插入子句。
C#class CompoundFrom
{// The element type of the data source.public class Student{public string LastName { get; set; }public List<int> Scores {get; set;}}static void Main(){// Use a collection initializer to create the data source. Note that // each element in the list contains an inner sequence of scores.List<Student> students = new List<Student>{new Student {LastName="Omelchenko", Scores= new List<int> {97, 72, 81, 60}},new Student {LastName="O'Donnell", Scores= new List<int> {75, 84, 91, 39}},new Student {LastName="Mortensen", Scores= new List<int> {88, 94, 65, 85}},new Student {LastName="Garcia", Scores= new List<int> {97, 89, 85, 82}},new Student {LastName="Beebe", Scores= new List<int> {35, 72, 91, 70}} }; // Use a compound from to access the inner sequence within each element.// Note the similarity to a nested foreach statement.var scoreQuery = from student in studentsfrom score in student.Scoreswhere score > 90select new { Last = student.LastName, score };// Execute the queries.Console.WriteLine("scoreQuery:");// Rest the mouse pointer on scoreQuery in the following line to // see its type. The type is IEnumerable<'a>, where 'a is an // anonymous type defined as new {string Last, int score}. That is,// each instance of this anonymous type has two members, a string // (Last) and an int (score).foreach (var student in scoreQuery){Console.WriteLine("{0} Score: {1}", student.Last, student.score);}// Keep the console window open in debug mode.Console.WriteLine("Press any key to exit.");Console.ReadKey();}
}
/*
scoreQuery:
Omelchenko Score: 97
O'Donnell Score: 91
Mortensen Score: 94
Garcia Score: 97
Beebe Score: 91
*/ 使用多個(gè) from 子句執(zhí)行聯(lián)接 復(fù)合?from?子句用于訪問單個(gè)數(shù)據(jù)源中的內(nèi)部集合。?不過,查詢還可以包含多個(gè)可從獨(dú)立數(shù)據(jù)源生成補(bǔ)充查詢的?from?子句。?使用此技術(shù)可以執(zhí)行某些類型的、無法通過使用?join 子句執(zhí)行的聯(lián)接操作。
下面的示例演示如何使用兩個(gè)?from?子句構(gòu)成兩個(gè)數(shù)據(jù)源的完全交叉聯(lián)接。
C#class CompoundFrom2
{static void Main(){char[] upperCase = { 'A', 'B', 'C' };char[] lowerCase = { 'x', 'y', 'z' };// The type of joinQuery1 is IEnumerable<'a>, where 'a// indicates an anonymous type. This anonymous type has two// members, upper and lower, both of type char.var joinQuery1 =from upper in upperCasefrom lower in lowerCaseselect new { upper, lower };// The type of joinQuery2 is IEnumerable<'a>, where 'a// indicates an anonymous type. This anonymous type has two// members, upper and lower, both of type char.var joinQuery2 =from lower in lowerCasewhere lower != 'x'from upper in upperCaseselect new { lower, upper };// Execute the queries.Console.WriteLine("Cross join:");// Rest the mouse pointer on joinQuery1 to verify its type.foreach (var pair in joinQuery1){Console.WriteLine("{0} is matched to {1}", pair.upper, pair.lower);}Console.WriteLine("Filtered non-equijoin:");// Rest the mouse pointer over joinQuery2 to verify its type.foreach (var pair in joinQuery2){Console.WriteLine("{0} is matched to {1}", pair.lower, pair.upper);}// Keep the console window open in debug mode.Console.WriteLine("Press any key to exit.");Console.ReadKey();}
}
/* Output:Cross join:A is matched to xA is matched to yA is matched to zB is matched to xB is matched to yB is matched to zC is matched to xC is matched to yC is matched to zFiltered non-equijoin:y is matched to Ay is matched to By is matched to Cz is matched to Az is matched to Bz is matched to C*/
轉(zhuǎn)載于:https://www.cnblogs.com/songtzu/archive/2012/08/14/2638374.html
總結(jié)
以上是生活随笔為你收集整理的sqlce wp from查询语句详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《梦仙》第九句是什么
- 下一篇: 穿越火线名字好听的