[c#] LINQ to SQL中的內部連接的語法是什麼?


Answers

而且,因為我更喜歡表達式鍊式語法,所以您可以這樣做:

var dealerContracts = DealerContact.Join(Dealer, 
                                 contact => contact.DealerId,
                                 dealer => dealer.DealerId,
                                 (contact, dealer) => contact);
Question

我正在編寫一個LINQ to SQL語句,並且遵循C#中的ON子句的正常內連接的標準語法。

如何在LINQ to SQL中表示以下內容:

select DealerContact.*
from Dealer 
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID



一個最好的例子

表名稱: TBL_EmpTBL_Dep

var result = from emp in TBL_Emp join dep in TBL_Dep on emp.id=dep.id
select new
{
 emp.Name;
 emp.Address
 dep.Department_Name
}


foreach(char item in result)
 { // to do}



var list = (from u in db.Users join c in db.Customers on u.CustomerId equals c.CustomerId where u.Username == username
   select new {u.UserId, u.CustomerId, u.ClientId, u.RoleId, u.Username, u.Email, u.Password, u.Salt, u.Hint1, u.Hint2, u.Hint3, u.Locked, u.Active,c.ProfilePic}).First();

寫你想要的表名,並初始化select來獲得字段的結果。




試試這個,

var dealer = from d in Dealer
             join dc in DealerContact on d.DealerID equals dc.DealerID
             select d;



為了擴展Clever Human的表達式鍊式語法answer :

如果您希望對兩個表中的字段進行相同的操作(例如篩選或選擇)(而不是僅在這兩個表中的一個表上),則可以在Join方法的最終參數的lambda表達式中創建一個新對象包含這兩個表格,例如:

var dealerInfo = DealerContact.Join(Dealer, 
                              dc => dc.DealerId,
                              d => d.DealerId,
                              (dc, d) => new { DealerContact = dc, Dealer = d })
                          .Where(dc_d => dc_d.Dealer.FirstName == "Glenn" 
                              && dc_d.DealerContact.City == "Chicago")
                          .Select(dc_d => new {
                              dc_d.Dealer.DealerID,
                              dc_d.Dealer.FirstName,
                              dc_d.Dealer.LastName,
                              dc_d.DealerContact.City,
                              dc_d.DealerContact.State });

有趣的部分是該示例第4行中的lambda表達式:

(dc, d) => new { DealerContact = dc, Dealer = d }

...我們構建一個新的匿名類型的對象,它具有DealerContact和Dealer記錄的屬性以及它們的所有字段。

我們可以在篩选和選擇結果時使用這些記錄中的字段,如示例的其餘部分所示,該示例使用dc_d作為我們構建的匿名對象的名稱,該對象同時具有DealerContact和Dealer記錄作為其屬性。




其實,通常最好不要加入,就是在linq中。 當有導航屬性時,寫一條linq語句的簡潔方法是:

from dealer in db.Dealers
from contact in dealer.DealerContacts
select new { whatever you need from dealer or contact }

它轉換為where子句:

SELECT <columns>
FROM Dealer, DealerContact
WHERE Dealer.DealerID = DealerContact.DealerID



var Data= (from dealer in Dealer join dealercontact in DealerContact on dealer.ID equals dealercontact.DealerID
select new{
dealer.Id,
dealercontact.ContactName

}).ToList();



嘗試這個 :

     var data =(from t1 in dataContext.Table1 join 
                 t2 in dataContext.Table2 on 
                 t1.field equals t2.field 
                 orderby t1.Id select t1).ToList(); 



基本上LINQ 連接運算符對SQL沒有任何好處。 即以下查詢

var r = from dealer in db.Dealers
   from contact in db.DealerContact
   where dealer.DealerID == contact.DealerID
   select dealerContact;

將導致SQL中的INNER JOIN

連接對於IEnumerable <>很有用,因為它更高效:

from contact in db.DealerContact  

條款將為每個經銷商重新執行但對於IQueryable <>則情況並非如此。 加入也不那麼靈活。




Related