有没有办法实现我使用LINQ获得的所有可查询对象?
假设我想根据一些标准获取作者列表及其书籍列表(这是一个示例查询,我希望不需要一些实际的类):
var authorData = from a in ctx.Authors
where a.Age > 30
select new // anon class
{
Name = a.Name,
City = a.Address.City,
Books = from b in ctx.Books
where b.Price > 10
&& b.AuthorId == a.Id
select new // anon class
{
Name = b.Name,
Price = b.Price,
}
};
现在我想迭代作者authorData
并做一些工作,让我们说打印书数。 Books列表的类型为IQueryable
,为每个作者获取这些对象将产生一个我想要避免的DB的新查询。
foreach(var author in authorData.ToList())
{
Console.WriteLine(author.Books.Count());
}
如何避免每个作者的新SQL查询?有没有办法让Book anonymous类对象与Author匿名类同时实现?
修改
最终目标是尽可能少地读取数据库,但拥有所有Author
和Book
个对象。在每个foreach循环迭代中实现书籍似乎很糟糕。
我甚至会接受一个答案,将Book对象放在一个单独的集合中,比如Dictionary或者使Author / Book连接方便的东西,但不需要很多DB读取
答案 0 :(得分:0)
您可以对书籍查询和外部查询使用ToList()方法。
var authorData = (from a in ctx.Authors
where a.Age > 30
select new // anon class
{
Name = a.Name,
City = a.Address.City,
Books = (from b in ctx.Books
where b.Price > 10
&& b.AuthorId == a.Id
select new // anon class
{
Name = b.Name,
Price = b.Price,
}).ToList()
}).ToList();
foreach(var author in authorData)
{
Console.WriteLine(author.Books.Count());
}
答案 1 :(得分:-2)
var authorData = (from a in ctx.Authors
where a.Age > 30
select new // anon class
{
Name = a.Name,
City = a.Address.City,
Books = from b in ctx.Books
where b.Price > 10
&& b.AuthorId == a.Id
select new // anon class
{
Name = b.Name,
Price = b.Price,
}
}).ToList();