【问题标题】:Combine Generic ICollection<T> Expression with an Any Accepting a Generic Predicate将泛型 ICollection<T> 表达式与任何接受泛型谓词的表达式组合
【发布时间】:2011-06-22 19:10:58
【问题描述】:

我正在尝试弄清楚如何组合以下表达式:

Expression<Func<TParent, ICollection<TChild>>> childSelector = p => p.Children;

Expression<Func<TChild, bool>> childPredicate = c => c.NameLast.StartsWith("V");

var anyExpression = childSelector <------> .Any(childPredicate);

“”是我不知道该怎么处理的部分。我正在使用 LINQKit,我只是不知道如何组合这些表达式。

有人可以帮帮我吗?

【问题讨论】:

    标签: c# .net-4.0 linq-to-entities expression-trees


    【解决方案1】:

    我不是 100% 清楚你想要 anyExpression 是什么,但这是我最好的猜测。

    Expression<Func<TParent, bool>> anyExpression = p => p.Select(childselector).Any(childPredicate);
    

    【讨论】:

    • 这可能适用于其他情况,我确实尝试过。虽然它确实构建了,但它在运行时给了我一个关于未定义变量“p”的错误。这是有道理的,因为我在代码的其他地方构建谓词的方式。感谢您的回答,希望对这里的人有所帮助。
    【解决方案2】:

    你可以做 childselector(parent).Any(childPredicate) 其中 parent 是一个 TParent 实例。

    【讨论】:

    • 感谢您的回复,但是,直到程序执行的很久以后,我才会有父级的实例。我正在尝试跨多个类构建表达式尝试,因此我从实际查询中删除了几个级别。
    【解决方案3】:

    我找到了answer to my problem

    childSelector.Combine(p => p.AsQueryable().Any<TEntity>(this.Predicate), true)
    

    这就是代码的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多