2012-03-17 6 views
0

私は、遅延読み込みを有効にしたEF 4.3を使用してASP.NET MVC製品を操作します。1対多のリストのIDのみを照会します

私は、ゼロ以上の添付ファイルを持つことができ、クラスの製品を、持っている:

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

使用 'ICollectionを'。 –

答えて

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(); 
関連する問題