1

関連するデータベースには 3 つのテーブルがあります。Advocate、Vendor、および Advocate_Vendor。

多対多のリンクである Advocate_Vendor テーブルには、vendorId と AdvocateId があります。

私の最終的な目標は、オブジェクトを取り戻すList<Advocate>ことです... 1 つのベンダーに属する支持者のコレクションです。私はこれを書きました:

var list = new List<Advocate>();

        foreach (var vendorAdvocates in db.Advocate_Vendors)
        {
            if (vendorAdvocates.VendorId == vendorId)
            {
                list.Add(db.Advocates.SingleOrDefault(a => a.AdvocateId == vendorAdvocates.AdvocateId));
            }
        }

そして、これ:

var list = (from vendorAdvocates in db.Advocate_Vendors 
            where vendorAdvocates.VendorId == vendorId 
            select db.Advocates.SingleOrDefault(a => 
                a.AdvocateId == vendorAdvocates.AdvocateId)).ToList();

これが最善の方法ですか?「含む」キーワードまたはもう少し読みやすいものを使用してこれを行うためのより合理的な方法があるかもしれないように、間違っているようです...すべてのベンダーの支持者を入手してください

ありがとう

4

3 に答える 3

2

Advocate_Vendors と Advocates の間でa を使用するjoinのが正しい方法です。

var list = (from vendorAdvocates in db.Advocate_Vendors 
            join advocates in db.Advocates
               on vendorAdvocates.AdvocateId equals advocates.AdvocateId
            where vendorAdvocates.VendorId == vendorId
            select advocates).ToList();
于 2013-11-13T23:05:45.777 に答える
1
var list = (from vendorAdvocates in db.Advocate_Vendors
            from advocate in db.Advocates
            where vendorAdvocates.VendorId == vendorId && 
                  vendorAdvocates.AdvocateId = advocate.Id
            select advocate)
           .ToList();
于 2013-11-13T22:59:33.033 に答える
0

外部キーとナビゲーション プロパティを適切に設定すれば、次のように記述できるはずです。

var list = (from vendorAdvocates in db.Advocate_Vendors 
            where vendorAdvocates.VendorId == vendorId 
            select db.Advocate).ToList();
于 2013-11-13T23:11:23.820 に答える