位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# join 查詢

提問人:劉團(tuán)圓發(fā)布時間:2020-12-11

    剛才甩一個共享的鍵字段(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ù)。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部