我使用EF 4.3启用了延迟加载,从事ASP.NET MVC产品。
我有一个类产品,可以有零个或多个附件:
public class Product
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual long Id { get; set; }
//... other properties
public virtual List<Attachment> Pictures { get; set; }
}
public class Attachment
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual long Id { get; set; }
[Required]
public virtual byte[] Data { get; set; }
}
我的主页(HTML)将提供产品详细信息,包括附件列表。对于后者,我只需要附件的id,并且明确地不想加载Data
属性(可能是大量数据)。
如何编写仅返回附件ID的查询,并且不会在数据库中查询附件的数据属性?
以下查询未成功;错误:无法创建“XXX.Model.Attachment”类型的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。
var query = from a in db.Attachments
from prod in db.Product
from pic in prod.Pictures
where prod.Id == prodId && a.Id == pic.Id
select a.Id;
query.ToList();
以下确实加载了附件的数据字段:
var product = db.Products.Find(prodId);
var pictureIds = product.Pictures.Select(x => x.Id).ToList();
答案 0 :(得分:1)
试试这个:
var query = from prod in db.Product
from pic in prod.Pictures
where prod.Id == prodId
select pic.Id;
query.ToList();
或
var query = db.Product
.Where(p => p.Id == prodId)
.SelectMany(p => p.Pictures)
.Select(a => a.Id)
.ToList();