我有以下代码:
List<T> list = new List<T>();
IEnumerable<T> query1 = ...
IEnumerable<T> query2 = ...
IEnumerable<T> query3 = ...
list.AddRange(query1.ToList<T>());
list.AddRange(query2.ToList<T>());
list.AddRange(query3.ToList<T>());
据我所知,每次在查询中使用ToList方法时,这将导致数据库的访问。
如何组合查询以便只对数据库进行一次旅行?
答案 0 :(得分:1)
你或许能够将他们联合起来。
list.AddRange( query1.Union(query2).Union(query3));
答案 1 :(得分:1)
如果Union或Concat最终没有减少对数据库的调用次数,我至少会删除那些ToList()调用。 AddRange采用IEnumerable,您的查询已经是IEnumerable。在您的查询上调用ToList()只意味着您的项目被枚举两次 - 一次将查询转换为List,第二次将列表添加到主List。