我有一种方法可以处理插件的分页逻辑;
public async Task<JsonResult> DataPagination()
{
List<GLAccountModel> glAccounts = await HttpClientHelper.GetListHttpResponseAsync<GLAccountModel>(httpBaseAdress, "GLAccount", "GetAll");
var (filteredResultCount, totalRecord) = DataTableHelper.ManageDataTable(glAccounts, Request, x => x.Name.Contains());
return Json(new { data = glAccounts, draw = Request["draw"], recordsTotal = totalRecord, recordsFiltered = filteredResultCount });
}
Run Code Online (Sandbox Code Playgroud)
在这里,我将lambda函数传递x => x.Name.Contains()给该ManageDataTable方法。这是ManageDataTable方法的实现;
public static (int, int) ManageDataTable<TModel>(List<TModel> models, HttpRequestBase request, Func<TModel, bool> lambdaExpression) where TModel : class
{
string search = request["search[value]"];//arama
if (!string.IsNullOrEmpty(search))
{
models = models.Where(lambdaExpression).ToList();
}
return (filteredResultCount, totalRecord);
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在Contains()方法主体中提供ManageDataTable()方法的参数,而不是随参数本身一起发送。为了更清楚,我想收到lambda函数x => x.Name.Contains()从ManageDataTable(),和身体内部的ManageDataTable()我希望能够给一个参数来Contains()这是我的拉姆达功能的一部分方法。那可能吗?谢谢。
在更改方法参数方面,我在这里可以想到两个选项。您可以使它Func<string, Func<TModel, bool>>像这样:
public static (int, int) ManageDataTable<TModel>(
List<TModel> models,
HttpRequestBase request,
Func<string, Func<TModel, bool>> filterProvider)
where TModel : class
{
string search = request["search[value]"];//arama
if (!string.IsNullOrEmpty(search))
{
var filter = filterProvider(search);
models = models.Where(filter).ToList();
}
return (filteredResultCount, totalRecord);
}
Run Code Online (Sandbox Code Playgroud)
您可以这样称呼:
DataTableHelper.ManageDataTable(glAccounts, Request,
search => model => model.Name.Contains(search));
Run Code Online (Sandbox Code Playgroud)
这种方法实际上是一种高阶方法。或者,您可以采取Func<TModel, string, bool>这样的做法:
public static (int, int) ManageDataTable<TModel>(
List<TModel> models,
HttpRequestBase request,
Func<TModel, string, bool> filter)
where TModel : class
{
string search = request["search[value]"];//arama
if (!string.IsNullOrEmpty(search))
{
models = models.Where(model => filter(model, search)).ToList();
}
return (filteredResultCount, totalRecord);
}
Run Code Online (Sandbox Code Playgroud)
您可以这样称呼:
DataTableHelper.ManageDataTable(glAccounts, Request,
(model, search) => model.Name.Contains(search));
Run Code Online (Sandbox Code Playgroud)
使用哪一个无关紧要-但是值得您了解它们两个。
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |