0

この述語を 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++;
}

クエリは機能していますが、良い結果が返されません...

私は夢中になっています:(

君の力が必要。

ありがとうございました

4

1 に答える 1

0

あなたの質問はこれに非常に似ているようです: 正確な重複ではありませんが、「(値のリスト)の[列]の場所」を実行する方法をSQLにLinqします。

他のクエリをと組み合わせて動的にクエリを作成しようとしていることがわかります。||これは、比較演算子しかない場合に実行したいことです...

代わりに、次のようなものはどうですか?ufe => listUtilisateurId.Contains(ufe.user_id)

于 2012-12-14T19:50:37.297 に答える