【发布时间】:2017-02-12 02:03:16
【问题描述】:
伪代码中的基本思想
Select(a, b) => new Tuple<List<Item1>, List<Item2>>(a, b)
我正在尝试在以下位置完成此操作:
- 对 db 的单个查询
- 显然使用 linq(查询或方法语法)
这里是涉及到的两个类
public class Bundle
{
public Guid Id { get; set; }
public string Name { get; set; }
public HashSet<Inventory> Inventories { get; set; }
}
public class Inventory
{
public Guid Id { get; set; }
public string Name { get; set; }
public int Stock { get; set; }
}
现在我能想到的只有
using (var context = new MyEntities())
{
return new Tuple<IEnumerable<Inventory>, IEnumerable<Bundle>>(context.Inventories.OrderBy(a => a.Stock).ToList()
, context.Bundles.Include(b => b.Inventories).OrderBy(c => c.Name).ToList());
}
但是,这会访问数据库两次。
我知道UNION 用于组合来自 2 个不同查询的结果集,但是这两个查询必须具有相同的列数,所以我假设在选择相同数据时最好使用它。
如何将两个不同表中的数据选择到两个单独的列表中,而对 db 只进行一次命中?
【问题讨论】:
-
想要只访问一次数据库有什么特别的原因吗?
-
只是为了尽量减少执行的查询量
标签: c# entity-framework linq query-optimization