Tôi muốn biết làm thế nào để có thể làm cho một cây biểu thức bằng cách nhập nhiều hơn một tham sốNhiều điều kiện trong Lambda Expressions trong thời gian chạy C#
Ví dụ:
dataContext.Users.Where(u => u.username == "Username" && u.password == "Password")
Tại thời điểm mã mà tôi đã làm được những điều sau nhưng muốn thực hiện tổng quát hơn trong trường hợp cho dù tình trạng này là OR hoặc 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();
}
Cảm ơn
Về lý do tại sao tôi đang đi với một cách khó khăn (trả lại một đại biểu), lý do là không có quyền truy cập trực tiếp vào tên cột cơ sở dữ liệu tại thời điểm thiết kế. Và tôi không thể truy cập bằng cách sử dụng datacontext.table.Where (...); bởi vì tôi có tên bảng được mã hóa bên trong cơ sở dữ liệu. Cảm ơn câu trả lời của bạn Tôi sẽ tìm phương pháp AndAlso ... – Ryan
@Ryan - xem cập nhật - Tôi nhớ thư viện thực hiện việc này! –
Cảm ơn Daniel ... Tôi thực sự đánh giá cao nó trông giống như chính xác những gì tôi cần :) – Ryan