最好用一些代码解释这个:
public IQueryable<DatabaseRecord> GetQueryableLinkedRecords()
{
if(this.currentlyHeldIds.Count() == 0)
{
return Enumerable.Empty<DatabaseRecord>().AsQueryable();
}
else
{
return from r in this.DBContext.DatabaseRecords
where this.currentlyHeldIds.Contains(r.Id)
select r;
}
}
这个想法是,如果没有要查询的currentHeldId,则没有理由再次实际查询数据库。如果currentHeldIds没有值,LINQ to SQL仍将查询db。这种方法有什么问题吗?我意识到还有一些其他问题与返回IQueryable有关,但抛开那些论点,试图绕过这样的db调用有什么不对吗?
答案 0 :(得分:11)
我认为你应该重新思考你的功能实际上要做什么。如果您返回IQueryable<T>
,那么暗示调用者将存储生成的查询,并在实际执行查询时收到最新结果。请记住:在查询.ToList()
,.ToArray()
,foreach
等之前,实际上不会查询数据库。
但是,如果您的目标是返回查询的当前状态,那么您的方法应该只返回IList<T>
或其他内容。然后,您可以返回空的List<T>
,或者在您构建的查询上调用.ToList()
并返回该值。
一般情况下,我会尽量避免返回空的可查询对象,因为它会误导来电者他们实际得到的内容。
答案 1 :(得分:1)
对我来说似乎很好。如果功能在消费方面是相同的,那应该是非常好的。