467

私は LINQ to SQL ステートメントを作成していますON。C# の句を使用した通常の内部結合の標準構文を使用しています。

LINQ to SQL で次をどのように表現しますか。

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

19 に答える 19

598

次のようになります。

from t1 in db.Table1
join t2 in db.Table2 on t1.field equals t2.field
select new { t1.field2, t2.field3}

より良い例として、テーブルに適切な名前とフィールドを付けるとよいでしょう。:)

アップデート

あなたのクエリには、これがより適切かもしれないと思います:

var dealercontacts = from contact in DealerContact
                     join dealer in Dealer on contact.DealerId equals dealer.ID
                     select contact;

あなたが探しているのは連絡先であって、ディーラーではありません。

于 2008-09-01T01:08:58.110 に答える
243

そして、私は式チェーン構文を好むので、それをどのように行うかを次に示します。

var dealerContracts = DealerContact.Join(Dealer, 
                                 contact => contact.DealerId,
                                 dealer => dealer.DealerId,
                                 (contact, dealer) => contact);
于 2010-10-03T20:30:43.800 に答える
62

Clever Human による式チェーン構文の回答を拡張するには、次のようにします。

2 つのテーブルの一方だけではなく、結合されている両方のテーブルのフィールドに対して処理 (フィルターや選択など) を行いたい場合は、Join メソッドの最終パラメーターのラムダ式で新しいオブジェクトを作成できます。たとえば、これらのテーブルの両方を組み込みます。

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 行目のラムダ式です。

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

...ここで、すべてのフィールドとともに、DealerContact レコードと Dealer レコードをプロパティとして持つ新しい匿名型オブジェクトを作成します。

次に、例の残りの部分で示されているように、結果をフィルタリングして選択するときに、これらのレコードのフィールドを使用できます。この例ではdc_d、DealerContact レコードと Dealer レコードの両方をプロパティとして持つ、作成した匿名オブジェクトの名前として使用します。

于 2015-03-27T21:39:53.393 に答える
45
var results = from c in db.Companies
              join cn in db.Countries on c.CountryID equals cn.ID
              join ct in db.Cities on c.CityID equals ct.ID
              join sect in db.Sectors on c.SectorID equals sect.ID
              where (c.CountryID == cn.ID) && (c.CityID == ct.ID) && (c.SectorID == company.SectorID) && (company.SectorID == sect.ID)
              select new { country = cn.Name, city = ct.Name, c.ID, c.Name, c.Address1, c.Address2, c.Address3, c.CountryID, c.CityID, c.Region, c.PostCode, c.Telephone, c.Website, c.SectorID, Status = (ContactStatus)c.StatusID, sector = sect.Name };


return results.ToList();
于 2009-12-01T06:52:49.533 に答える
26

外部キーを作成すると、LINQ-to-SQL によってナビゲーション プロパティが作成されます。それぞれDealerにコレクションがあり、そのコレクションをDealerContacts選択、フィルタリング、および操作できます。

from contact in dealer.DealerContacts select contact

また

context.Dealers.Select(d => d.DealerContacts)

ナビゲーション プロパティを使用していない場合は、LINQ-to-SQL の主な利点の 1 つである、オブジェクト グラフをマップする部分を利用できません。

于 2011-11-24T03:43:53.657 に答える
25

Linq Join演算子を使用します。

var q =  from d in Dealer
         join dc in DealerConact on d.DealerID equals dc.DealerID
         select dc;
于 2008-09-01T01:09:30.420 に答える
23

basically LINQ join operator provides no benefit for SQL. I.e. the following query

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

will result in INNER JOIN in SQL

join is useful for IEnumerable<> because it is more efficient:

from contact in db.DealerContact  

clause would be re-executed for every dealer But for IQueryable<> it is not the case. Also join is less flexible.

于 2011-03-02T16:58:54.817 に答える
13

実際、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
于 2012-07-04T20:08:40.910 に答える
4

linq C#で2つのテーブルを内部結合する

var result = from q1 in table1
             join q2 in table2
             on q1.Customer_Id equals q2.Customer_Id
             select new { q1.Name, q1.Mobile, q2.Purchase, q2.Dates }
于 2017-04-01T20:42:09.080 に答える
2
OperationDataContext odDataContext = new OperationDataContext();    
        var studentInfo = from student in odDataContext.STUDENTs
                          join course in odDataContext.COURSEs
                          on student.course_id equals course.course_id
                          select new { student.student_name, student.student_city, course.course_name, course.course_desc };

学生とコースのテーブルには、主キーと外部キーの関係があります

于 2012-10-27T03:29:02.140 に答える
2

代わりにこれを試してください、

var dealer = from d in Dealer
             join dc in DealerContact on d.DealerID equals dc.DealerID
             select d;
于 2014-10-13T12:15:33.213 に答える
-6

1つの最良の例

テーブル名: TBL_EmpおよびTBL_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}
于 2013-05-03T10:06:06.627 に答える