Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将EF Linq结果投影到IEnumerable中,其中Book在IBook中显式实现?_C#_Linq_Entity Framework - Fatal编程技术网

C# 如何将EF Linq结果投影到IEnumerable中,其中Book在IBook中显式实现?

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)

尝试将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>();
试试这个:

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后检查它