HOW TO:從方法傳回查詢 (C# 程式設計手冊)
更新:2010 年 7 月
這個範例會示範如何從方法傳回查詢做為傳回值以及 out 參數。
任何查詢的型別必須是 IEnumerable 或 IEnumerable<T>,或者是 IQueryable<T> 一類的衍生型別 (Derived Type)。 因此,傳回查詢之方法的任何傳回值或是 out 參數也一定具有該型別。 如果方法會將查詢具體化為具象的 List<T> 或 Array 型別,這時便會被視為將傳回查詢結果,而不是傳回查詢本身。 從方法傳回的查詢變數仍然可以加以撰寫或修改。
範例
在下列範例中,第一個方法會將查詢當做傳回值傳回,第二個方法則會將查詢當做 out 參數傳回。 請注意,這兩種情況都是傳回查詢,而不是傳回查詢結果。
class MQ
{
// QueryMethhod1 returns a query as its value.
IEnumerable<string> QueryMethod1(ref int[] ints)
{
var intsToStrings = from i in ints
where i > 4
select i.ToString();
return intsToStrings;
}
// QueryMethod2 returns a query as the value of parameter returnQ.
void QueryMethod2(ref int[] ints, out IEnumerable<string> returnQ)
{
var intsToStrings = from i in ints
where i < 4
select i.ToString();
returnQ = intsToStrings;
}
static void Main()
{
MQ app = new MQ();
int[] nums = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// QueryMethod1 returns a query as the value of the method.
var myQuery1 = app.QueryMethod1(ref nums);
// Query myQuery1 is executed in the following foreach loop.
Console.WriteLine("Results of executing myQuery1:");
// Rest the mouse pointer over myQuery1 to see its type.
foreach (string s in myQuery1)
{
Console.WriteLine(s);
}
// You also can execute the query returned from QueryMethod1
// directly, without using myQuery1.
Console.WriteLine("\nResults of executing myQuery1 directly:");
// Rest the mouse pointer over the call to QueryMethod1 to see its
// return type.
foreach (string s in app.QueryMethod1(ref nums))
{
Console.WriteLine(s);
}
IEnumerable<string> myQuery2;
// QueryMethod2 returns a query as the value of its out parameter.
app.QueryMethod2(ref nums, out myQuery2);
// Execute the returned query.
Console.WriteLine("\nResults of executing myQuery2:");
foreach (string s in myQuery2)
{
Console.WriteLine(s);
}
// You can modify a query by using query composition. A saved query
// is nested inside a new query definition that revises the results
// of the first query.
myQuery1 = from item in myQuery1
orderby item descending
select item;
// Execute the modified query.
Console.WriteLine("\nResults of executing modified myQuery1:");
foreach (string s in myQuery1)
{
Console.WriteLine(s);
}
// Keep console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
編譯程式碼
建立以 .NET Framework 3.5 (含) 以後版本為目標的 Visual Studio 專案。 根據預設,專案有 System.Core.dll 的參考,以及 System.Linq 命名空間的 using 指示詞。
將類別取代為範例中的程式碼。
按 F5 編譯和執行程式。
按任何鍵離開主控台視窗。
請參閱
概念
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2010 年 7 月 |
已在範例中加入 QueryMethod2。 已加強說明的註解。 |
客戶回函。 |