no1*_*oss 2 linq entity-framework ef-code-first c#-4.0
我确定之前已经问过这个问题,但我找不到一个好的方法来搜索它.
我有一个类似以下的课程
public class Vendor
{
public int VendorId { get; set; }
public string Name { get; set; }
public int ProductCount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个配置类设置
public class VendorConfiguration : EntityTypeConfiguration<Vendor>
{
public VendorConfiguration()
{
Property(p => p.Name).IsRequired().HasMaxLength(128);
Ignore(v => v.ProductCount);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用来抓住供应商的查询.
public Vendor[] GetVendors()
{
using (var db = new UbidContext())
{
var query = (from vendor in db.Vendors
select vendor);
return query.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能用一个看起来类似的子查询填充ProductCount
ProductCount = (from vend in db.VendorProducts
where vend.VendorId == id
select vend).Count()
Run Code Online (Sandbox Code Playgroud)
有没有办法可以将它添加到主查询中,所以我只对数据库进行1次调用?
谢谢,安德鲁
我会这样试试:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是您必须投影到非实体类型(上例中的匿名),然后在返回之前将投影ProductCount值复制到Vendor项目中.
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |