C# join 查詢
剛才甩一個共享的鍵字段(ID)創(chuàng)建的customers和orders列表等數(shù)據(jù)集可以執(zhí)行join查詢,即可以用一個查詢搜索兩個列表中相關(guān)的數(shù)據(jù),用鍵字段把結(jié)果連接起來。這類似于SQL數(shù)據(jù)查詢語言中的JOIN操作。LINQ在査詢語法中提供了join命令,如下面的示例所示。
試一試 Join 查詢:BeginningCSharp7_22 11_JoinQuery\Program.cs
按照下面的歩驟在Visual Studio 2017中創(chuàng)建示例:
(1)在 C:\BeginningCSharp7\Chapter22目錄中創(chuàng)建一個新的控制臺應(yīng)用程序 BeginningCSharp7_22_U_ JoinQueryo
(2)從前面的示例中復(fù)制用來創(chuàng)建Customer類和Order微代碼,以及初始化customers列表(List<Customer> customers)和orders列表(List<Order> orders)的代碼。
(3)在Main()方法的customers和orders列表初始化之后,輸入如下所示的查詢:
var queryResults =
from c in customers
join o in orders on c.ID equals o.ID
select new { c.ID, c.City, SalesBefore = c.Sales, NewOrder = o.Amount,
SalesAfter = c.Sales+o.Amount };
(4)用前面例子中使用的標(biāo)準(zhǔn)foreach查詢處理循環(huán)結(jié)束程序:
foreach (var item in queryResults)
{
WriteLine(item);
}
(5)編譯并執(zhí)行程序,結(jié)果如下:
{ ID = P, City = Tehran, SalesBefore = 7000, NewOrder = 100, SalesAfter = 7100 }
{ ID = Q, City = London, SalesBefore = 8000, NewOrder = 200, SalesAfter = 8200 }
{ ID = R, City = Beijing, SalesBefore = 9000, NewOrder = 300, SalesAfter = 9300 }
{ ID = S, City = Bogota, SalesBefore = 1001, NewOrder = 400, SalesAfter = 1401 }
{ ID = T, City = Lima, SalesBefore = 2002, NewOrder = 500, SalesAfter = 2502 }
Program finished, press Enter/Return to continue:
示例說明
Customer類和Order類以及customers和orders列表的聲明和初始化與前面示例中的相同。
查詢使用join關(guān)鍵字通過Customer類和Order類的ID字段,把每個顧客與其對應(yīng)的訂單連接起來:
var queryResults =
from c in customers
join o in orders on c.ID equals o.ID
on關(guān)鍵字之后是鍵字段(ID)的名稱,equals關(guān)鍵字指定另一個集合中的對應(yīng)字段。查詢結(jié)果僅包含兩個集合中ID字段值相同的對象數(shù)據(jù)。
select語句投影了一個帶指定屬性的新數(shù)據(jù)類型,因此可以清楚地看到最初的總銷售量、新訂單和最終的新總銷售量:
select new { c.ID, c.City, SalesBefore = c.Sales, NewOrder = o.Amount,SalesAfter = c.Sales+o.Amount };
這個程序沒有在customer對象中遞增總銷售量,但可以輕松地在自己的業(yè)務(wù)邏輯中完成這一任務(wù)。
點(diǎn)擊加載更多評論>>