2017-02-19 58 views
0

多個表MVC5查看數據,我有以下兩個表格使用LINQ

public class Book 
{ 
    public int Id { get; set; } 

    [Required] 
    [StringLength(255)] 
    public string BookTitle { get; set; } 

    [Required] 
    [StringLength(255)] 
    public string Author { get; set; } 

    [Required] 
    [StringLength(400)] 
    public string Description { get; set; } 
} 

,並

public class Rating 
{ 
    public int Id { get; set; } 

    [Required] 
    public int Rate { get; set; } 

    public Book Books { get; set; } 

    [Required] 
    public int BookId { get; set; } 
} 

一本書可以有多個等級。我需要編寫一個查詢,以便我可以查看每本書的BookTitle,作者,描述和平均評分。我知道我可以使用視圖模型,但我不知道如何組織 LINQ查詢

和幫助,將不勝感激

回答

1

一種方法是建立在Book導航屬性:

public class Book 
{ 
    public ICollection<Rating> Ratings { get; set; } 
} 

如果使用DbContext從Entit

_context.Books.Select(c => new 
{ 
    c.BookTitle, 
    c.Author, 
    c.Description, 
    c.Ratings.Select(e => e.Rate).Sum()/c.Ratings.Count() 
}); 

:然後,使用LINQ,你可以使用的參考屬性y框架,這將轉化爲SQL查詢。

1

讓我們引入一個ViewModel類第一:

public class BookViewModel 
{ 
    public string BookTitle { get; set; } 
    public string Author { get; set; } 
    public string Description { get; set; } 
    public double AvgRating { get; set; } 
} 

我們可以執行以下LINQ即可。

var bookViewModels = context.Books.GroupJoin(context.Ratings, x => x.Id, y => y.BookId, 
    (book, rates) => new BookViewModel 
{ 
    Author = book.Author, 
    BookTitle = book.BookTitle, 
    Description = book.Description, 
    AvgRating = rates.Average(r => r.Rate) 
}); 

它可能會更容易讓你在BookRatings導航屬性。

+0

非常感謝!運作良好。產出如預期。 –