Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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

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使用父成员将所有子记录收集到列表中_C#_Linq_Entity Framework - Fatal编程技术网

C# EF使用父成员将所有子记录收集到列表中

C# EF使用父成员将所有子记录收集到列表中,c#,linq,entity-framework,C#,Linq,Entity Framework,假定 我需要一个viewModel,如: Book { int id int AuthorId bool Active string Name } 如何使用LINQ实现该视图模型 我知道,也见过很多人去拿所有儿童书籍的清单 BooksViewModel { int BookId int AuthorId string AuthorName string BookName } 但当我需要在列表中包含父表数据(如Aut

假定

我需要一个viewModel,如:

Book 
{
    int id
    int AuthorId
    bool Active
    string Name  
}
如何使用LINQ实现该视图模型

我知道,也见过很多人去拿所有儿童书籍的清单

BooksViewModel
{
     int BookId
     int AuthorId
     string AuthorName
     string BookName
}
但当我需要在列表中包含父表数据(如Author Id和AuthorName)时,我就被难住了

如何构造LINQ以包括这些

db.Authors.Where(a => a.Active && a.ShowOnBookWall)
     .SelectMany(author => author.Books)
     .ToList();

这样做明智吗?

我会在
书籍
实体上放置一个属性,以引用
作者
,如下所示:

           db.Authors.Where(a => a.Active && a.ShowOnBookWall)
                .SelectMany(author=> author.Books).ToList()
                .Select( w=> new BooksViewModel()
                {
                    AuthorName = db.Authors.First(ar => ar.Id == w.AuthorId).Name,
                    AuthorId = w.AuthorId,
                    BookId = w.Id,
                    BookName=w.Name,
                });
然后做一些类似的事情:

public class Book 
{
    public virtual Author Author { get; set; }
    ...
}

我会在
书籍
实体上放置一个属性来引用
作者
,如下所示:

           db.Authors.Where(a => a.Active && a.ShowOnBookWall)
                .SelectMany(author=> author.Books).ToList()
                .Select( w=> new BooksViewModel()
                {
                    AuthorName = db.Authors.First(ar => ar.Id == w.AuthorId).Name,
                    AuthorId = w.AuthorId,
                    BookId = w.Id,
                    BookName=w.Name,
                });
然后做一些类似的事情:

public class Book 
{
    public virtual Author Author { get; set; }
    ...
}

我会在
书籍
实体上放置一个属性来引用
作者
,如下所示:

           db.Authors.Where(a => a.Active && a.ShowOnBookWall)
                .SelectMany(author=> author.Books).ToList()
                .Select( w=> new BooksViewModel()
                {
                    AuthorName = db.Authors.First(ar => ar.Id == w.AuthorId).Name,
                    AuthorId = w.AuthorId,
                    BookId = w.Id,
                    BookName=w.Name,
                });
然后做一些类似的事情:

public class Book 
{
    public virtual Author Author { get; set; }
    ...
}

我会在
书籍
实体上放置一个属性来引用
作者
,如下所示:

           db.Authors.Where(a => a.Active && a.ShowOnBookWall)
                .SelectMany(author=> author.Books).ToList()
                .Select( w=> new BooksViewModel()
                {
                    AuthorName = db.Authors.First(ar => ar.Id == w.AuthorId).Name,
                    AuthorId = w.AuthorId,
                    BookId = w.Id,
                    BookName=w.Name,
                });
然后做一些类似的事情:

public class Book 
{
    public virtual Author Author { get; set; }
    ...
}
试试这个:-

db.Books.Where(book => book.Author.Active && book.Author.ShowOnBookWall)
    .Select(book => new BooksViewModel
    {
        BookId = book.Id,
        AuthorId = book.Author.Id,
        AuthorName = book.Author.Name,
        BookName = book.Name
    })
您可以使用
SelectMany
展平
Book
对象,并使用
Author
对象投影它。

尝试以下操作:-

db.Books.Where(book => book.Author.Active && book.Author.ShowOnBookWall)
    .Select(book => new BooksViewModel
    {
        BookId = book.Id,
        AuthorId = book.Author.Id,
        AuthorName = book.Author.Name,
        BookName = book.Name
    })
您可以使用
SelectMany
展平
Book
对象,并使用
Author
对象投影它。

尝试以下操作:-

db.Books.Where(book => book.Author.Active && book.Author.ShowOnBookWall)
    .Select(book => new BooksViewModel
    {
        BookId = book.Id,
        AuthorId = book.Author.Id,
        AuthorName = book.Author.Name,
        BookName = book.Name
    })
您可以使用
SelectMany
展平
Book
对象,并使用
Author
对象投影它。

尝试以下操作:-

db.Books.Where(book => book.Author.Active && book.Author.ShowOnBookWall)
    .Select(book => new BooksViewModel
    {
        BookId = book.Id,
        AuthorId = book.Author.Id,
        AuthorName = book.Author.Name,
        BookName = book.Name
    })

您可以使用
SelectMany
展平
Book
对象,并将其与
Author
对象一起投影。

Select(x=>newbooksview模型有一个错误。Select在IEnumberable和IQuerableIf之间是模糊的,如果我添加:(authorbj,bookObj)=>new{authorbj,bookObj})。ToList()那么authorObj和bookObj没有解决…与2013年相比,EF 6.1.2..和…需要其他细节吗?我对你的方法做了一些研究:我想你的意思是:books=db.Authors.Where(a=>a.Active&&a.showoonbookwall).ToList()。选择many(author=>author.Books.Where(book=>book.Active),(author,book)=>newbooksviewmodel{BookId=book.Id,authord=author.Id,AuthorName=book.author.Name,BookName=book.Name});为了代码的简单性(目前-稍后我将测试效率),我将使用其他答案.Select(x=>newbooksviewmodel有一个错误。Select在IEnumberable和IQuerableIf之间是模糊的,如果我添加:(authorbj,bookObj)=>new{authorbj,bookObj})。ToList()那么authorObj和bookObj没有解决…与2013年相比,EF 6.1.2..和…需要其他细节吗?我对你的方法做了一些研究:我想你的意思是:books=db.Authors.Where(a=>a.Active&&a.showoonbookwall).ToList()。选择many(author=>author.Books.Where(book=>book.Active),(author,book)=>newbooksviewmodel{BookId=book.Id,authord=author.Id,AuthorName=book.author.Name,BookName=book.Name});为了代码的简单性(目前-稍后我将测试效率),我将使用其他答案.Select(x=>newbooksviewmodel有一个错误。Select在IEnumberable和IQuerableIf之间是模糊的,如果我添加:(authorbj,bookObj)=>new{authorbj,bookObj})。ToList()那么authorObj和bookObj没有解决…与2013年相比,EF 6.1.2..和…需要其他细节吗?我对你的方法做了一些研究:我想你的意思是:books=db.Authors.Where(a=>a.Active&&a.showoonbookwall).ToList()。选择many(author=>author.Books.Where(book=>book.Active),(author,book)=>newbooksviewmodel{BookId=book.Id,authord=author.Id,AuthorName=book.author.Name,BookName=book.Name});为了代码的简单性(目前-稍后我将测试效率),我将使用其他答案.Select(x=>newbooksviewmodel有一个错误。Select在IEnumberable和IQuerableIf之间是模糊的,如果我添加:(authorbj,bookObj)=>new{authorbj,bookObj})。ToList()那么authorObj和bookObj没有解决…与2013年相比,EF 6.1.2..和…需要其他细节吗?我对你的方法做了一些研究:我想你的意思是:books=db.Authors.Where(a=>a.Active&&a.showoonbookwall).ToList()。选择many(author=>author.Books.Where(book=>book.Active),(author,book)=>newbooksviewmodel{BookId=book.Id,authord=author.Id,AuthorName=book.author.Name,BookName=book.Name});为了代码的简单性(目前-稍后我将测试效率),我将使用其他答案,而另一个答案也可以,经过我的修改,我相信此解决方案使我的代码更简单-即使支持此解决方案的底层EF代码更昂贵?我想在这两种方法之间做一些负载测试,而另一个答案也可以,经过我的修改,我相信这个解决方案可以让我的代码更简单——即使支持它的底层EF代码更昂贵?我想在这两种方法之间做一些负载测试,而另一个答案也可以,经过我的修改,我相信这个解决方案可以让我的代码更简单——即使支持它的底层EF代码更昂贵?我想在这两种方法之间做一些负载测试,而另一个答案也可以,经过我的修改,我相信这个解决方案可以让我的代码更简单——即使支持它的底层EF代码更昂贵?我想在这两种方法之间做一些负载测试