Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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# 通过linq筛选选择父项和一些子项_C#_Linq - Fatal编程技术网

C# 通过linq筛选选择父项和一些子项

C# 通过linq筛选选择父项和一些子项,c#,linq,C#,Linq,我有三门课: OrderSet-订单(1:n)和订单详细信息(1:n) OrderSet和Order各有一个属性“Status” 我想要一个接收一个构造,其中所有订单集的状态为“打开”,所有与订单相关的状态为“打开” 我试过这个: var orderSet = db.OrderSet .Where(x => x.Status == 'Open') .Where(x => x.Order.Any(y => y.Status == 'Open'))

我有三门课: OrderSet-订单(1:n)和订单详细信息(1:n)

OrderSet和Order各有一个属性“Status”

我想要一个接收一个构造,其中所有订单集的状态为“打开”,所有与订单相关的状态为“打开”

我试过这个:

var orderSet = db.OrderSet
      .Where(x => x.Status == 'Open')
      .Where(x => x.Order.Any(y => y.Status == 'Open'))
      .Include(x => x.Order.Select(q => q.OrderDetail))
但我收到了所有订单,而且状态为“关闭”

什么是我的错


提前感谢。

如果要忽略包含任何未处于“打开”状态的
订单的
订单集
,您可以使用:

var orderSets = db.OrderSet
      .Where(os => os.Status == "Open" && os.Order.All(o => o.Status == "Open")
      .Include(os => os.Order.Select(o => o.OrderDetail));
如果您想包括那些
OrderSet
s,但只忽略不符合上述条件的子
Order
s,那么如果不修改查询返回的OrderSet集合,可能无法做到这一点

如果这就是你想要做的,一种实现的方法是:

var orderSets = db.OrderSet
      .Where(os => os.Status == "Open")
      .Include(os => os.Order.Select(o => o.OrderDetail)).ToList();
foreach (var orderSet in orderSets)
{
    orderSet.Order.RemoveAll(o => o.Status == "Open");
}

这段代码甚至可以编译吗?提供
OrderSet
Order
模型。使用这段代码,我没有得到任何数据。(对于订单集,count=0)如果我将“All”更改为“Any”,那么我得到了一个包含两个订单的订单集(一个状态为Open,一个状态为closed),如果您没有得到任何数据,那是因为没有任何记录满足所使用的条件。第一段所描述的是你想要的吗?如果是,那么请确保您的订单集实际处于打开状态,并且所有子订单也处于打开状态。如果这不是您想要的,您是否阅读了最后一段?这是您想要的还是您需要澄清的完全不同的东西?“如果是,那么请确保您的订单集实际上具有打开状态,并且所有子订单也具有打开状态“我只需要Staus=打开的订单”。订单集中有两个订单(一个状态为打开,另一个状态为关闭。我想获取唯一打开订单的订单集。因此,条件“和所有子订单也具有打开状态”不正确,因为这些命令中只有一个有Staus=Open@Nunzio然后,阅读我答案的最后一段。您需要获取所有处于打开状态的订单集(包括所有子订单),将结果存储在列表中,然后浏览列表以删除所有未处于打开状态的子订单。