ObjectQuery 類支持對實體數據模型(EDM)執行LINQ to Entities和Entity SQl查詢。ObjectQuery還實現了一組查詢生成器方法,這些方法可用於按順序構造等效於Entity SQl的查詢命令。下面是ObjectQuery的查詢生成器方法以及等效的Entity SQl語句:
Distinct,Except,GroupBy,Intersect,OfType,OrderBy,Select,SelectValue,Skip,Top,Union,UnionAll,Where
每個查詢生成器方法返回ObjectQuery的一個新實例。使用這些方法可以構造查詢,而查詢的結果集基於前面ObjectQuery實例序列的操作。下面來看具體的代碼片斷:
l Execute方法:
using (var edm = new NorthwindEntities())
{
string esql = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
ObjectQuery<Customers> query = edm.CreateQuery<Customers>(esql );
ObjectResult<Customers> results = query.Execute(MergeOption.NoTracking);
Assert.AreEqual (results.Count(), 10);
foreach (Customers c in query)
Console.WriteLine(c.CustomerID);
}
其中需要說明的是: MergeOption這個枚舉類型的參數項,MergeOption有四種值分別是:
l AppendOnly:只追加新實體,不修改以前獲取的現有實體。這是默認行為。
l OverwriteChanges:將 ObjectStateEntry 中的當前值替換為存儲區中的值。這將使用服務器上的數據重寫在本地所做的更改。
l PreserveChanges:將替換原始值,而不修改當前值。這對於在發生開放式並發異常之後強制成功保存本地值非常有用。
l NoTracking:將不修改 ObjectStateManager,不會獲取與其他對象相關聯的關系,可以改善性能。
l GetResultType方法:返回查詢結果的類型信息.例如:
using (var edm = new NorthwindEntities())
{
string esql = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
ObjectQuery<Customers> query = edm.CreateQuery<Customers>(esql );
Console.WriteLine(query.GetResultType().ToString());
//輸出結果為:
//NorthWindModel .Customers
}
l ToTraceString方法:獲取當前執行的SQL語句。
l Where