【问题标题】:SelectMany on an IQueryable ignores conditions?IQueryable 上的 SelectMany 忽略条件?
【发布时间】:2012-10-05 17:56:54
【问题描述】:

我正在尝试使用 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);

【问题讨论】:

    标签: linq entity-framework iqueryable lambda


    【解决方案1】:

    好吧,您的第一个查询并没有断言所有 ActionItemStates 都将您的 userId 和 IsActive 设为 true。

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

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

    第一个查询在Sources 之间进行选择,而不是在ActionItemStates 之间进行选择。

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

    【讨论】:

    • 感谢您的解释,我认为这可能是 .Any 语句的问题。因此,如果我只想要与条件相对应的 ActionItemStates,我需要更改什么?
    • @NullReference 如果您需要第一个查询,则需要在第二个查询中“重新添加”您的条件。但在这种情况下,第一个查询......变得无用(至少对于那部分)!
    猜你喜欢
    • 2014-04-11
    • 2011-01-27
    • 2021-11-18
    • 1970-01-01
    • 2022-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2021-09-27
    相关资源
    最近更新 更多