对于每个表(我有很多表),我在ASP.Net Core应用程序中提供了Lookup REST API方法。
这是我对每个表的查询的一部分:
context.Users.Select(t => new ViewLookupModel()
{
id = t.Id,
title = t.DisplayName
})
//......
context.Groups.Select(t => new ViewLookupModel()
{
id = t.Id,
title = t.Name
})
但我想编写扩展来缩小我需要为每个表编写的代码。像这样:
public static IQueryable<ViewLookupModel> SelectLookup<T>(this IQueryable<T> query, Func<int> idField, Func<string> titleField)
{
return query.Select(t => new ViewLookupModel()
{
id = idField(),
title = titleField()
});
}
用例:
context.Users.SelectLookup(t => t.Id, t => t.DisplayName)
//......
context.Groups.SelectLookup(t => t.Id, t => t.Title)
但我得到错误:
委托'Func'不带1个参数。
在使用自定义SELECT扩展方法查询数据库时,我对任何性能问题都很感兴趣。
答案 0 :(得分:1)
将您的扩展方法更改为此并尝试。 Extension方法将T作为输入并返回相应的int或string等。
public static IQueryable<ViewLookupModel> SelectLookup<T>(this IQueryable<T> query, Func<T,int> idField, Func<T,string> titleField)
{
return query.Select(t => new ViewLookupModel()
{
id = idField(t),
title = titleField(t)
});
}