IQueryable上的SelectMany会忽略条件吗?

时间:2012-10-15 17:40:14

标签: linq entity-framework iqueryable lambda

我正在尝试使用SelectMany来评估具有条件的第一个查询,基于这些结果执行另一个查询。我被告知SelectMany应该能够做到这一点。我遇到的问题是SelectMany似乎忽略了第一个lambda表达式中的条件。我的问题可能是第一个表达,但我不太确定。我有什么想法我做错了。

第一

  //get source based on user and active flag
  var query = _sourceRepository.GetTable().Where(s => s.ActionItemStates.Any(ais => ais.UserId == user.Id && ais.IsActive == active));  

第二 - 忽略第一个条件

var queryActionItems = query.SelectMany(x => x.ActionItemStates).OrderBy(x => x.ActionItem.SortOrder);

enter image description here

1 个答案:

答案 0 :(得分:1)

好吧,您的第一个查询并未声明所有ActionItemStates都将使您的userId和IsActive为真。

只是意味着:选择我所有的Sources 至少一个 ActionItemState符合我的条件。

但是在第二个查询中,ActionItemStates不再符合您的条件:您只需从第一个查询中选择的ActionItemStates中获取所有Sources

首次查询会在Sources之间进行选择,而不是ActionItemStates之间的选择。

现在,这只是解释为什么它不起作用,真正的答案需要你清楚地解释你想要检索的内容!