使用泛型C#使用where子句进行选择

罗南·范德沃肯

我有一个使用sqlite(sqlite-pcl-net)建立数据库连接的应用程序(xamarin)。我已经编写了使用特定类从数据库检索数据的方法。但是我对如何使用泛型编写这些内容感兴趣?

我要使用的泛型方法如下:(导致User类)

public Task<User> GetUserByIdAsync(int id)
{
    return Database.Table<User>().Where(i => i.Id == id).FirstOrDefault();
}

现在,我需要具有相同的值,从而产生一个T类,但id保持不变(function参数保持一个int值)。有人可以帮我弄这个吗?

塞利姆·耶尔迪兹(Selim Yildiz)

正如@vc 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");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用C#中的泛型进行转换

来自分类Dev

使用Func传递泛型方法的Where和Orderby子句

来自分类Dev

c#使用泛型方法

来自分类Dev

使用Where子句的C#结果序列

来自分类Dev

如何在C#中使用Linq从泛型创建动态选择投影?

来自分类Dev

MySQL在Select +中使用主WHERE子句进行选择

来自分类Dev

使用c#泛型扩展方法对类而非集合进行操作

来自分类Dev

使用泛型的子类进行C#运算符重载

来自分类Dev

对WHERE子句使用选择结果

来自分类Dev

使用WHERE IN子句进行INSERT INTO

来自分类Dev

C#泛型方法选择

来自分类Dev

C#泛型并使用类型化方法中的非泛型版本

来自分类Dev

如何在C#中的泛型类中使用泛型类的对象?

来自分类Dev

如何使用反射或泛型标准化泛型实体框架 C# 代码?

来自分类Dev

使用泛型(Winform C#)更新特定属性

来自分类Dev

在C#接口中使用泛型

来自分类Dev

在C#中使用List <T>(泛型)

来自分类Dev

使用泛型的C#类型安全克隆

来自分类Dev

C#使用泛型和接口实现

来自分类Dev

在C#中使用泛型实现多态

来自分类Dev

在C#接口中使用泛型

来自分类Dev

在 C# 中使用泛型类型作为参数

来自分类Dev

使用从类型枚举中选择的泛型

来自分类Dev

使用泛型进行类型检查

来自分类Dev

使用泛型在类之间进行转换

来自分类Dev

FSharp:使用泛型进行类型推断

来自分类Dev

如何使用WITH RECURSIVE子句进行选择

来自分类Dev

使用where子句在冬眠中选择查询

来自分类Dev

PDO使用where子句选择多个表