Vla*_*mir 6 c# linq lambda entity-framework func
我正在寻找一种基于方法参数动态构建表达式的方法。
这是我的服务方法的代码片段,我想在其中构建谓词表达式。
public async Task<Account> GetCustomerAccountsAsync(Parameters params)
{
var items = await _unitOfWork.Accounts.GetWhereAsync(a => a.CustomerId == params.CustomerId && ... );
...
}
Run Code Online (Sandbox Code Playgroud)
GetWhereAsync是通用存储库中的一种方法,如下所示:
public async Task<IEnumerable<TEntity>> GetWhereAsync(Expression<Func<TEntity, bool>> predicate)
{
return await Context.Set<TEntity>().Where(predicate).ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
和参数类:
public class Parameters
{
public string CustomerId { get; set; }
public string AccountId { get; set; }
public string ProductId { get; set; }
public string CurrencyId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是,每个非null 的Parameter对象属性都作为条件添加到表达式谓词中。
例如,如果CustomerId和AccountId有一些值,我想动态构建具有与以下谓词相同功能的谓词表达式:
var items = await _unitOfWork.Accounts.GetWhereAsync(a => a.CustomerId == params.CustomerId && a.AccountId == params.AccountId);
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助。
您不需要在这里使用表达式来动态构建某些东西。你可以这样做:
_unitOfWork.Accounts.Where(a =>
(params.CustomerId == null || a.CustomerId == params.CustomerId) &&
(params.AccountId == null || a.AccountId == params.AccountId) &&
(params.ProductId == null || a.ProductId == params.ProductId) &&
(params.CurrencyId == null || a.CurrencyId == params.CurrencyId)
);
Run Code Online (Sandbox Code Playgroud)
这就是我之前对具有多个可选搜索参数的搜索表单进行查询的方式。
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |