static void Main(string[] args) { using (var db = new LivrosContext()) { db.Database.EnsureDeleted(); db.Database.EnsureCreated(); db.Database.ExecuteSqlCommand( @"CREATE FUNCTION [dbo].[ExemplaresDisponiveis] (@livroId INT) RETURNS INT AS BEGIN DECLARE @count AS INT SET @count = (SELECT QtdExemplares FROM Livros WHERE LivroId = @livroId)-(SELECT COUNT(*) FROM LivroEmprestimo WHERE LivroId = @livroId AND DataDevolucao IS NULL) RETURN @count END" ); db.Livros.Add( new Livro { Titulo = "Domain-Driven Design: Tackling Complexity in the Heart of Software", Autor = "Eric Evans", AnoPublicacao = 2003, QtdExemplares = 5, Emprestimos = new List <LivroEmprestimo>() { new LivroEmprestimo() { NomeAluno = "José da Silva", DataEmprestimo = DateTime.Parse("01/11/2017"), DataLimiteDevolucao = DateTime.Parse("07/11/2017"), }, new LivroEmprestimo() { NomeAluno = "Alexandre Alves", DataEmprestimo = DateTime.Parse("03/11/2017"), DataLimiteDevolucao = DateTime.Parse("10/11/2017"), } } }); db.Livros.Add( new Livro { Titulo = "Agile Principles, Patterns, and Practices in C#", Autor = "Robert C. Martin", AnoPublicacao = 2006, QtdExemplares = 2, Emprestimos = new List <LivroEmprestimo>() { new LivroEmprestimo() { NomeAluno = "Marcos Ribeiro", DataEmprestimo = DateTime.Parse("02/11/2017"), DataLimiteDevolucao = DateTime.Parse("08/11/2017"), }, new LivroEmprestimo() { NomeAluno = "Fernando Lopes", DataEmprestimo = DateTime.Parse("03/11/2017"), DataLimiteDevolucao = DateTime.Parse("10/11/2017"), } } }); db.SaveChanges(); Console.WriteLine("------------ RESULTADOS ------------"); var query = from p in db.Livros select new { Titulo = p.Titulo, ExemplaresDisponiveis = LivrosContext.ExemplaresDisponiveis(p.LivroId) }; query.ToList().ForEach(x => { Console.WriteLine("Título: " + x.Titulo); Console.WriteLine("Exemplares disponíveis: " + x.ExemplaresDisponiveis); }); System.Console.WriteLine(); Console.WriteLine("------------ RESULTADOS (Apenas disponíveis) ------------"); var query2 = from p in db.Livros where LivrosContext.ExemplaresDisponiveis(p.LivroId) > 0 select p; query2.ToList().ForEach(x => { Console.WriteLine("Título: " + x.Titulo); }); Console.ReadKey(); } }