Как указано @ v c 74 в разделе комментариев, вы можете реализовать общий интерфейс или наследовать от базового класса со свойством Id
:
public Task<T> GetUserByIdAsync<T>(int id) where T : BaseEntity
{
return Database.Table<T>().Where(i => i.Id == id).FirstOrDefault();
}
public class User : BaseEntity
{
public int Id {get; set;}
}
Или вы можете использовать Expression Builder :
public static IQueryable<T> WhereByField<T>(this IQueryable<T> q, string filterField)
{
var param = Expression.Parameter(typeof(T), "p");
var prop = Expression.Property(param, filterField);
var exp = Expression.Lambda(prop, param);
Type[] types = new Type[] { q.ElementType, exp.Body.Type };
var mce = Expression.Call(typeof(Queryable), "where", types, q.Expression, exp);
return q.Provider.CreateQuery<T>(mce);
}
Реализация этого метода расширения будет выглядеть примерно так: Database.Table<User>().WhereByField("Id");
: