C# EF使用父成员将所有子记录收集到列表中
假定 我需要一个viewModel,如: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
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代码更昂贵?我想在这两种方法之间做一些负载测试