Я знаю, что это своего рода «ежу понятно», но убедитесь, что это пространство имен импортировано, потому что я видел эту ошибку, вызванную пропуском снова и снова.
using System.Linq;
Если я правильно помню, это будеткомпилировать, но будет выдавать эту ошибку во время выполнения, если это пространство имен не объявлено.
Также, если вы хотите очистить запрос LINQ (я люблю использовать лямбда-выражения), я считаю, что это выражение lamda будет работать для вашей ситуации.
IEnumerable<IBooks> books = (context.Library.Select(b => new Book{ b.Id, b.Title })).Cast<IBook>();