Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不使用foreach的情况下从集合中查询实体_C#_Linq_Entity Framework - Fatal编程技术网

C# 如何在不使用foreach的情况下从集合中查询实体

C# 如何在不使用foreach的情况下从集合中查询实体,c#,linq,entity-framework,C#,Linq,Entity Framework,我一直在努力,试图让我的思想围绕这些概念。任何帮助都将不胜感激。给定一个表中的订单集合,迭代该集合并对其他表执行查询的最佳方式是什么 这个循环实现了我想要的,但是我已经被告知并展示了它是如何导致性能问题的。在其他文章中,我读到了最好在循环之外查询数据库的地方 foreach (var item in myOrders) { var lookUpValues=(from f in ORDERS where f.ORDERS ==item.ORDER_ID && f.ORDERS_

我一直在努力,试图让我的思想围绕这些概念。任何帮助都将不胜感激。给定一个表中的订单集合,迭代该集合并对其他表执行查询的最佳方式是什么

这个循环实现了我想要的,但是我已经被告知并展示了它是如何导致性能问题的。在其他文章中,我读到了最好在循环之外查询数据库的地方

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”)

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

看看这些:

试试这个:

var orders = myOrders.SelectMany(item => (from f in ORDERS
                                          where f.ORDERS ==item.ORDER_ID 
                                          && f.ORDERS_SUFFIX==item.LINE
                                          select f.Something));

如果你把第一次尝试和最后一次尝试结合起来,你就会成功。如果您没有创建匿名类型,那么最后一次尝试就可以了

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();

我的订单和订单来自哪里。它们是来自数据上下文的属性吗?这些是你已经收回的收藏吗?我猜想ORDERS是数据上下文中的一个属性,myOrders是前面查询的结果,但这并不容易判断。此外,如果myOrders(或orders)是查询的结果,那么它仍然是IQueryable,还是您调用了ToArray或ToList?嗨,Devin。Orders是一个表,myOrders是临时表中存在的用户定义的订单子集。但我认为它抛出了一个错误,因为ORDERS是一个表实体,其中as ordersAndLine位于内存中。上面贴的错误消息。我想我明白你的意思了。给我几分钟试试这个。干杯