我一直在努力并试图让我的思想围绕这些概念。任何帮助将不胜感激。给定一个表中的 Orders 集合,迭代它并对其他表执行查询的最佳方法是什么。
这个循环做我想要的,但我被告知并展示了这如何导致性能问题。在其他帖子上,我读过最好在循环之外查询 dbase。
foreach (var item in myOrders)
{
var lookUpValues=(from f in ORDERS
where f.ORDERS ==item.ORDER_ID
&& f.ORDERS_SUFFIX==item.LINE
select f.Something);
}
我没有在迭代之前拉下整个 Order 表,而是尝试了类似的方法,但正如您所见,它不会返回准确的行。
var orderIds=myOrders.Select (x =>x.ORDER_ID).Distinct().ToList();
var lineIds=myOrders.Select (x =>x.LINE).Distinct().ToList();
var query=(from f in ORDERS
where orderIds.Contains(f.ORDERS)
&& lineIds.Contains(f.ORDERS_SUFFIX)
select f).ToList();
下面会做我认为需要的。它将返回迭代所需的正确订单。但是,它会引发错误,我认为这是因为您无法同时查询内存对象和实体。
var ordersAndLine=(from f in myOrders select new{sId=f.ORDER_ID,line=f.LINE}).ToList();
var query=(from f in ORDERS
from s in ordersAndLine
where s.sId==f.ORDERS
&& s.line==f.ORDERS_SUFFIX
select f).ToList();
NotSupportedException:无法创建“匿名类型”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
我真的希望我的问题是有道理的。如果我没有正确解释我的情况,我提前道歉。我一直在做的是将大部分表拉到内存中进行迭代,但我担心这会导致性能问题,并想看看是否有更好的方法来过滤结果查询。