我々の仕事のテーブルに関連して、非常に一般的ですが、一般的に使用される3つの接続があります、左と右の接続内のリンクを接続します
このセクションでいえばである
左を使用する方法、1、LINQの中で右の接続、内部接続に参加。
2、3つの間の接続が備わっていますか?
3、3つの接続LINQの構文は(私はそれが全く別の場所を接続考える)どのようにそれをの一種であります
SQL Serverの3つの接続
まず、我々は左と右の接続、内部接続で、次のSQL接続を示し、次の2つのテーブルが必要になります。
TABLE [DBO]を作成します。[会社]( [ID] int型のアイデンティティ主キー、 [コード] UNIQUEIDENTIFIER、 [会社名]データ型はnvarchar(20)nullで、 [アドレス]のデータ型はnvarchar(100)ヌル ) CREATE TABLEを[DBO]。[人々 ] ( [ID] int型のアイデンティティ主キー、 [CompanyCode] UNIQUEIDENTIFIERヌル、 [名前]データ型はnvarchar(20)nullで、 [年齢]のIntはnull、 )
データ準備
会社
人
在SQL表连接LEFTは(結合)、JOIN RIGHT JOIN、INNER JOINは
- LEFTによるキーワードが接続されて残っている登録しようことは明らかである [人々 ]のp-LEFT JOINのON p.CompanyCode会社C = c.Code SELECT * FROM 右の接続をされたキーワードを登録しようRIGHTによって明らかである- SELECT * FROM [社] C RIGHTはP ON = c.Codeのp.CompanyCode [人]を登録しよう としては、内部接続されているキーによって明らかであるがJOIN - [人] P内SELECT * FROMを = p.CompanyCodeの[社] CをJOIN c.Code
実行後の結果
各接続は、によって特徴付けられます:
左と右の接続がよく理解されている右側の右側より左側のデータの一致が空になる場合は、文字通りの意味を見てみると、右の接続の反対側、左側が左側のデータ接続に表示されている知ることができます
内部リンクはまた、よく理解され、プラグが長い一致がディスプレイ上に表示することができないほどのデータと一致していない見ることができます
それでは、どのようにC#のLINQのテーブルでそれを達成するために私たちに参加?
二、セット間のC#の接続は、LINQのを使用して実装しました
また、予め用意し、データ・ソース・クラス
当社と人々のカテゴリ
public class Company { public int Id { get; set; } public Guid Code { get; set; } public string CompanyName { get; set; } public string Address { get; set; } } public class People { public int Id { get; set; } public Guid CompanyCode { get; set; } public string Name { get; set; } public int Age { get; set; } }
初始数据
List<Company> companyList = new List<Company>(){ new Company() { Id=1, Code = new Guid("B0C5900C-DC15-4F9B-A2C0-25D79B2987E2"), CompanyName = "菜鸟公司", Address = "菜鸟地址", }, new Company() { Id=2, Code = new Guid("FA46534F-E5FA-48DD-8C67-58A8FC5573FB"), CompanyName = "中级地址", Address = "中级地址", }, new Company() { Id=3, Code = new Guid("8188B6E3-1FEA-462F-83A5-A6610996DB42"), CompanyName = "牛X公司", Address = "牛X地址", }, new Company() { Id=4, Code = new Guid("64CD13EB-398A-4DC2-BFBF-F4032A40DC10"), CompanyName = "黑马公司", Address = "黑马地址", }, }; List<People> peopleList = new List<People>() { new People() { Id = 1, CompanyCode = new Guid("B0C5900C-DC15-4F9B-A2C0-25D79B2987E2"), Name = "Tony", Age = 18 }, new People() { Id = 2, CompanyCode = new Guid("B0C5900C-DC15-4F9B-A2C0-25D79B2987E2"), Name = "Ramon", Age = 18 }, new People() { Id = 3, CompanyCode = new Guid("FA46534F-E5FA-48DD-8C67-58A8FC5573FB"), Name = "Ronnin", Age = 18 }, new People() { Id = 4, CompanyCode = new Guid("8188B6E3-1FEA-462F-83A5-A6610996DB42"), Name = "Vi Vi", Age = 18 }, new People() { Id = 4, CompanyCode = new Guid("E0E04E6B-4E0F-4A83-AFDB-30427221448E"), Name = "Gary Chan", Age = 18 }, };
Linq连接代码
{ Console.WriteLine("-----------------------------------------------------LEFT JION---------------------------------------------------------"); var qurey = from c in companyList join p in peopleList on c.Code equals p.CompanyCode into joinCompanyList from p in joinCompanyList.DefaultIfEmpty() select new { Id = c?.Id, CompanyName = c?.CompanyName, CompanyAddress = c?.Address, peopleName = p?.Name, peopleAge = p?.Age }; foreach (var item in qurey) { Console.WriteLine($"公司ID:{item.Id},公司名称:{item.CompanyName},公司地址:{item.CompanyAddress},个人名称:{item.peopleName},个人年龄:{item.peopleAge}"); } } { Console.WriteLine("-----------------------------------------------------RIGHT JION---------------------------------------------------------"); var qurey = from p in peopleList join c in companyList on p.CompanyCode equals c.Code into joinCompanyList from c in joinCompanyList.DefaultIfEmpty() select new { Id = c?.Id, CompanyName = c?.CompanyName, CompanyAddress = c?.Address, peopleName = p?.Name, peopleAge = p?.Age }; foreach (var item in qurey) { Console.WriteLine($"公司ID:{item.Id},公司名称:{item.CompanyName},公司地址:{item.CompanyAddress},个人名称:{item.peopleName},个人年龄:{item.peopleAge}"); } } { Console.WriteLine("-----------------------------------------------------INNER JOIN---------------------------------------------------------"); var qurey = from p in peopleList join c in companyList on p.CompanyCode equals c.Code select new { Id = c?.Id, = C .companyname得意,? CompanyAddress .Address = C ,? PeopleName .NAME = P ,? ?PeopleAge .Age = P }; foreachの(Qurey varにアイテム) { Console.WriteLineを($「会社ID:{item.Id }会社名:{} item.CompanyName、アドレス:{} item.CompanyAddress、個人名:{} item.peopleName、個人の年齢:item.peopleAge {}「); } }
結果
注:上記の例では、DefaultIfEmpty演算子を使用して、それが本当のシーケンスのデフォルトの要素を提供することができます。DefaultIfEmptyは、デフォルトのキーワードジェネリックを使用しています。キーワード戻りを型ヌルへの参照をデフォルトとタイプの値は0が返されます。構造の種類については、そのメンバーの種類は、それぞれのヌル(基準型)または0(値タイプ)に初期化されます