C# 如何将EF Linq结果投影到IEnumerable中,其中Book在IBook中显式实现?
尝试将EF linq结果投影到IEnumerable接口中,类似于下面的内容,但无法使其工作,任何提示都值得注意:C# 如何将EF Linq结果投影到IEnumerable中,其中Book在IBook中显式实现?,c#,linq,entity-framework,C#,Linq,Entity Framework,尝试将EF linq结果投影到IEnumerable接口中,类似于下面的内容,但无法使其工作,任何提示都值得注意: IEnumerable<IBook> books = (from b in context.Library (select new (Book() as IBook)
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>();
试试这个:
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;
};
试试这个:
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;
};
我知道这是一种“不需要动脑筋”的方法,但请确保导入此名称空间,因为我已经多次看到由于丢失而导致的错误
using System.Linq;
如果我没记错的话,它将编译,但如果没有声明名称空间,它将在运行时抛出该错误
另外,如果您想清理LINQ查询,我喜欢使用lambda,我相信这个lamda表达式将适合您的情况
IEnumerable<IBooks> books = (context.Library.Select(b => new Book{ b.Id, b.Title })).Cast<IBook>();
我知道这是一种“不需要动脑筋”的方法,但请确保导入此名称空间,因为我已经多次看到由于丢失而导致的错误
using System.Linq;
如果我没记错的话,它将编译,但如果没有声明名称空间,它将在运行时抛出该错误
另外,如果您想清理LINQ查询,我喜欢使用lambda,我相信这个lamda表达式将适合您的情况
IEnumerable<IBooks> books = (context.Library.Select(b => new Book{ b.Id, b.Title })).Cast<IBook>();
谢谢,但是属性Id和Title是显式实现的,编译器抱怨这本书没有Id或Title定义。我已经隐式和显式地实现了接口,请参见上面的编辑。我不确定显式接口有多实用。我倾向于远离它们b/c它阻止您使用诸如新书{Id=b.Id}之类的好的对象初始值设定项。谢谢,但是属性Id和标题是显式实现的,编译器抱怨书没有Id,或者没有定义标题。我已经隐式和显式地实现了接口,请参见上面的编辑。我不确定显式接口有多实用。我倾向于远离它们b/c它阻止你使用像新书{Id=b.Id}这样的好的对象初始值设定项。但我必须在你评论thxAdam后检查它你是正确的,这次它已经在那里了。但我必须在你评论thx后检查它