[英]Aggregate Extension Method Not Supported (Linq to Sql)
我试图在linq to Sql中使用Aggregate Method,但看起来它不受支持。
LibrarySystemDataContext ctx = new LibrarySystemDataContext();
var query = ctx.Books
.Select(x => new
{
BookID = x.BookID,
BookName = x.Title,
Authors = x.AuthorBooks.Select(a => a.Author)
.Aggregate(new StringBuilder(), (sb, r) => sb.Append(r.FirstName + " " + r.LastName +"& "), sb => sb.ToString())
});
要使用Aggregate,我立即将书籍转换为IEnumerable,如下所示:
var query = ctx.Books.AsEnumerable()
.Select(x => new
{
BookID = x.BookID,
BookName = x.Title,
Authors = x.AuthorBooks.Select(a => a.Author)
.Aggregate(new StringBuilder(), (sb, r) => sb.Append(r.FirstName + " " + r.LastName +"& "), sb => sb.ToString())
});
而且,这正在工作。 我想知道如果我编写这样的查询会带来什么弊端或设计缺陷。
使用ctx.Books.AsEnumerable()
您将从数据库中选择整个books表,并开始在内存中对其进行处理。 这不是一个好的设计。 您应该做的是,选择所需的数据,然后在本地进行处理。
例如
var temp = ctx.Books
// probably some where clause
.Select(x => new
{
BookID = x.BookID,
BookName = x.Title,
Authors = x.AuthorBooks.Select(a => a.Author)
})
.ToArray();
var books = temp.Select(x => new {
x.BookID,
x.BookName,
Authors = x.Authors.Aggregate(new StringBuilder(), (sb, r) => sb.Append(r.FirstName + " " + r.LastName +"& "), sb => sb.ToString())
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.