尝试将EF linq结果投影到IEnumerable接口中,类似于下面的内容,但无法使其正常工作,任何提示都是相关的:
IEnumerable<IBook> books = (from b in context.Library
(select new (Book() as IBook)
{
Id = b.Id,
Title = b.Title
}).AsEnumerable<IBook>;
错误:无法将Lambda表达式转换为字符串类型,因为它不是委托类型。
PS:它是显式接口实现,所以我不能只使用以下隐式接口实现:
IEnumerable<IBooks> books = (from b in context.Library
select new Book()
{
Id = b.Id,
Title = b.Title
}).AsEnumerable<IBook>();
答案 0 :(得分:2)
试试这个:
IEnumerable<IBooks> books = (from b in context.Library
select new Book
{
Id = b.Id,
Title = b.Title
}).Cast<IBook>();
或者你可以这样做:
IEnumerable<IBooks> books = (from b in context.Library
select new Book
{
Id = b.Id,
Title = b.Title
} as IBook);
第三个选项(针对您的显式界面):
IEnumerable<IBook> books = context.Library.Select(b =>
{
IBook book = new Book(); //as IBook - Might need a cast here
book.Id = b.Id;
book.Title = b.Title;
return book;
};
答案 1 :(得分:1)
我知道这有点'没脑子',但请确保导入此命名空间,因为我已经看到错误导致错误一遍又一遍。
using System.Linq;
如果我没记错的话,它会编译,但如果未声明该命名空间,则会在运行时抛出该错误。
此外,如果你想清理LINQ查询(我喜欢使用lambda),我相信这个lamda表达式适合你的情况。
IEnumerable<IBooks> books = (context.Library.Select(b => new Book{ b.Id, b.Title })).Cast<IBook>();