我有这个功能
public static async Task<Response> GetGeneralizedAsync<T>(int id, string key)
where T : class
{
using var context = new Context();
var prop = typeof(T).GetProperty(key);
var list = await context.Set<T>().AsAsyncEnumerable().Where(x => prop.GetValue(x) == (object)id).ToListAsync();
return new Response(StatusCodes.Status200OK, list);
}
但是它仅在使用客户端评估时有效,而且我担心性能,因为这将是一个非常核心的功能。是否可以做同样的事情,但让它在服务器上评估,或者至少提高性能?
最佳答案
Queryable.Where()
方法需要 Expression<Func<TSource,bool>>
表达式,用于“评估”应用于 Set<T>
时应返回哪些实体。实例。您可以定义您的方法,必须提供这样的表达式而不是 id
和key
您使用过的值。该方法可以如下所示:
public static async Task<Response> GetGeneralizedAsync<T>(Expression<Func<T, bool>> predicate)
where T : class
{
using var context = new Context();
var list = await context.Set<T>().Where(predicate)).ToListAsync();
return new Response(StatusCodes.Status200OK, list);
}
然后你像这样使用它:
GetGeneralizedAsync<People>(p => p.Age == 38);
关于c# - 在 EF Core 中创建外键的通用获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73602325/