我确定之前已经问过这个问题,但我找不到一个好的方法来搜索它。
我有一个类似下面的课程
public class Vendor
{
public int VendorId { get; set; }
public string Name { get; set; }
public int ProductCount { get; set; }
}
我有一个像
这样的配置类设置public class VendorConfiguration : EntityTypeConfiguration<Vendor>
{
public VendorConfiguration()
{
Property(p => p.Name).IsRequired().HasMaxLength(128);
Ignore(v => v.ProductCount);
}
}
以下是我用来抓住供应商的查询。
public Vendor[] GetVendors()
{
using (var db = new UbidContext())
{
var query = (from vendor in db.Vendors
select vendor);
return query.ToArray();
}
}
如何使用与
类似的子查询填充ProductCountProductCount = (from vend in db.VendorProducts
where vend.VendorId == id
select vend).Count()
有没有办法可以将它添加到主查询中,所以我只对该数据库进行1次调用?
谢谢, 安德鲁
答案 0 :(得分:6)
我会这样试试:
public Vendor[] GetVendors()
{
using (var db = new UbidContext())
{
var query = from vendor in db.Vendors
join vp in db.VendorProducts
on vendor.VendorId equals vp.VendorId
into vendorProducts
select new
{
Vendor = vendor,
ProductCount = vendorProducts.Count()
};
foreach (var item in query)
item.Vendor.ProductCount = item.ProductCount;
return query.Select(a => a.Vendor).ToArray();
}
}
问题是您必须投影到非实体类型(上例中的匿名),然后在返回之前将预计的ProductCount
值复制到项目的预计Vendor
中。< / p>