我在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++;
}
查询正在运行,但没有返回好结果......
我变得疯狂:(
需要你的帮助。
谢谢
答案 0 :(得分:0)
您的问题与此问题非常相似:Linq to SQL how to do "where [column] in (list of values)",但不完全相同。
我可以看到你试图通过将其他查询与||
组合来动态构建查询,如果你只有一个比较运算符,这就是你想要做的......
相反,这样的事情如何:ufe => listUtilisateurId.Contains(ufe.user_id)