7
我想知道如何能夠使一個表達式樹通過輸入一個以上的參數多個條件
例子:
dataContext.Users.Where(u => u.username == "Username" && u.password == "Password")
目前的代碼,我所做的就是以下,但想做出更一般的問候條件是否爲OR或AND
public Func<TLinqEntity, bool> ANDOnlyParams(string[] paramNames, object[] values)
{
List<ParameterExpression> paramList = new List<ParameterExpression>();
foreach (string param in paramNames)
{
paramList.Add(Expression.Parameter(typeof(TLinqEntity), param));
}
List<LambdaExpression> lexList = new List<LambdaExpression>();
for (int i = 0; i < paramNames.Length; i++)
{
if (i == 0)
{
Expression bodyInner = Expression.Equal(
Expression.Property(
paramList[i], paramNames[i]),
Expression.Constant(values[i]));
lexList.Add(Expression.Lambda(bodyInner, paramList[i]));
}
else
{
Expression bodyOuter = Expression.And(
Expression.Equal(
Expression.Property(
paramList[i], paramNames[i]),
Expression.Constant(values[i])),
Expression.Invoke(lexList[i - 1], paramList[i]));
lexList.Add(Expression.Lambda(bodyOuter, paramList[i]));
}
}
return ((Expression<Func<TLinqEntity, bool>>)lexList[lexList.Count - 1]).Compile();
}
感謝
關於爲什麼我要用艱難的方式(返回委託),原因是在設計時沒有直接訪問數據庫列名稱。我無法訪問使用datacontext.table.Where(...);因爲我已經在數據庫中加密了表名。 感謝您的回答我會尋找AndAlso方法... – Ryan 2010-03-21 12:38:40
@Ryan - 見更新 - 我記得這樣做的圖書館! – 2010-03-21 12:48:25
謝謝丹尼爾......我真的很感激它看起來像我需要:) – Ryan 2010-03-21 13:15:03