0

我一直在努力并试图让我的思想围绕这些概念。任何帮助将不胜感激。给定一个表中的 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”)。

我真的希望我的问题是有道理的。如果我没有正确解释我的情况,我提前道歉。我一直在做的是将大部分表拉到内存中进行迭代,但我担心这会导致性能问题,并想看看是否有更好的方法来过滤结果查询。

4

3 回答 3

1

如果您将第一次尝试和最后一次尝试结合起来,您将拥有它。如果您不创建匿名类型,最后一次尝试会很好。

var ordersAndLine=(from f in myOrders select f).ToList();

var query=(from f in ORDERS
from s in ordersAndLine
where s.ORDER_ID==f.ORDERS
&& s.LINE==f.ORDERS_SUFFIX
select f).ToList();
于 2012-05-24T04:52:59.707 回答
0

试试这个:

var orders = myOrders.SelectMany(item => (from f in ORDERS
                                          where f.ORDERS ==item.ORDER_ID 
                                          && f.ORDERS_SUFFIX==item.LINE
                                          select f.Something));
于 2012-05-24T01:55:49.680 回答