1

数据库中有三个相关的表。倡导者、供应商和 Advocate_Vendor。

Advocate_Vendor 表是多对多链接,具有vendorId 和advocateId。

我的最终目标是找回一个List<Advocate>对象......属于一个供应商的倡导者的集合。我写了这个:

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 之间使用 ajoin是正确的做法。

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 回答