2014-07-22 10 views
1

的具體數目我不能解釋它完美,所以我要跳到代碼如何使用LINQ可以從另一實體的列表,包括項目

我對EF兩個實體

public class Book 
{ 
    public int BookID { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public int CategoryID { get; set; } 

    public virtual Category Category { get; set; } 
} 

public class Category 
{ 
    public int CategoryID { get; set; } 
    public string CategoryName { get; set; } 

    public virtual ICollection<Book> Books { get; set; } 
} 

我想使用LINQ獲取類別列表,但每個類別都有特定數量的書籍。

這是方法我在做這

List<Category> model = new List<Category>(); 

var categories = db.Categories.Include(b => b.Books); 
foreach (Category cat in categories) 
{ 
    Category newCat = new Category(); 
    newCat = cat; 
    newCat.Books = cat.Books.Take(4).ToList(); 
    model.Add(newCat); 
} 

我試圖使代碼更短,我能避免只使用LINQ foreach循環?

回答

1

未經測試,但如何呢?您必須單獨指定類別中的每個屬性,但它將它放在一個LINQ語句中,並消除foreach循環和多次調用ToList

var model = db.Categories 
       .Include(b => b.Books) 
       .Select(c => new Category 
          { 
           Property1 = c.Property1, 
           Property2 = c.Property2, 
           ..., 
           Books = c.Books.Take(4) 
          }) 
       .ToList(); 

假設EF可以生成從這個有效的SQL查詢...

+1

這工作,謝謝!唯一的問題是,隨着類別實體的增長,我將以比以前更多的代碼結束。無論如何,這就是我正在尋找的。 –

相關問題