【问题标题】:Bad result using query generated automatically with predicate and OR condition使用带有谓词和 OR 条件自动生成的查询的错误结果
【发布时间】:2012-12-14 18:08:04
【问题描述】:

我将此谓词与 EF 和 lamdba 表达式一起使用:

public class PredicateBuilder
{
    public static Expression<Func<T, bool>> True<T>() { return f => true; }
    public static Expression<Func<T, bool>> False<T>() { return f => false; }
}

public static class ExpressionExtensions
{
    public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
    {
        return first.Compose(second, Expression.And);
    }

    public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
    {
        return first.Compose(second, Expression.Or);
    }
}

现在我只想动态构建这个查询:

Query(ufe => (ufe.FilmEtat.filmetat_code == etatString && ufe.user_id == 2) || (ufe.FilmEtat.filmetat_code == etatString && ufe.user_id == 11)).ToList();

我已经试过了:

var predicate = PredicateBuilder.True<UtilisateurFilmEtat>();
int i = 0;
foreach (int utilisateurId in listUtilisateurId)
{
    if (i == 0)
        predicate = ufe => (ufe.FilmEtat.filmetat_code == etatString && ufe.user_id == utilisateurId);
    else
        predicate.Or(ufe => ufe.FilmEtat.filmetat_code == etatString && ufe.user_id == utilisateurId);

    i++;
}

查询正在运行,但没有返回好的结果...

我快疯了:(

需要你的帮助。

谢谢

【问题讨论】:

  • 您能否举例说明“不返回好的结果”?

标签: linq entity-framework lambda predicate


【解决方案1】:

您的问题似乎与以下问题非常相似:Linq to SQL how to do "where [column] in (list of values)",尽管不是完全相同。

我可以看到您正在尝试通过将其他查询与 || 组合来动态构建查询,如果您只有一个比较运算符,这就是您想要做的......

相反,像这样的东西怎么样:ufe =&gt; listUtilisateurId.Contains(ufe.user_id)

【讨论】:

  • 非常感谢。这正是我需要的。当你可以变得简单时,为什么看起来很复杂...... :)
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多