0

我有一个自定义类 Customer 并在另一个类中返回一个基于来自 LiteDB 的 LiteCollection 的列表,该列表使用签名中的 Customer 类进行典型化。我想知道的是是否可以创建一个动态选择哪个类使用类型的方法,这意味着如果我可以将 LiteCollection 的类类型作为参数传递,以便在我调用该方法时返回。

代码如下:

public static LiteCollection<Customer> GetCustomers()
        {
            var collection = ConnectToDB().GetCollection<Customer>("customers");

            return collection;
        }
4

1 回答 1

2

怎么样:

public static LiteCollection<T> Get(string tableName)
{
    return ConnectToDB().GetCollection<T>(tableName);
}

那将被称为:

var table = Get<Customer>("customers");

更新

不幸的是,实际上不可能摆脱泛型类型,否则您的消费代码不知道它会返回什么。所以可能的最小值是

var table = Get<Customer>();

在这种情况下,您的实现需要某种从类型到表名的映射器。为此,我可以想到三种可能性(您也可以将它们结合起来):

  • 该类有一个内部Dictionary<Type, string>,其中手动输入给定类型的所有表名。
  • 约定是对于每个T表名都是类型名称的复数字符串,那么您需要一个返回的复数方法Pluralize(typeof(T).Name)
  • 通过反射,您可以遍历您的 derived DBContext,取出所有属性,并通过使用通用参数 from和属性名称DBSet<>预先填写字典。DBSet<>
于 2018-11-29T08:06:32.450 回答