【问题标题】:Generic Types and LINQ泛型类型和 LINQ
【发布时间】:2015-04-28 16:41:42
【问题描述】:

我编写了两个带有两个字段的公共类(test1、test2),例如。 G。 '名和姓'。 然后,我想将数据库中的数据填充到这个对象中。 我的第一次尝试是:

public List<T> FillFromDB<T>()
{
   IQueryable<T> query =
      from tbl in _table
      select new T {Name=tbl.name, Surname=tbl.surname}
}

但是 T 不知道这些领域。我能做什么?感谢您的帮助。

【问题讨论】:

  • 使test1test2 成为具有这些属性的接口,并在T 类型上放置一个where 子句。
  • 它们有可以用来代替 T 的基本类型吗?

标签: c# database linq generics


【解决方案1】:

您可以创建一个公共接口(或类),Test1Test2 将从该接口继承,然后对 FillFromDb 的类型参数指定必要的约束。

public interface IHasName
{
    public string Name { get; set; }
    public string Surname { get; set; }
}
public class Test1 : IHasName
{
    public string Name { get; set; }
    public string Surname { get; set; }
}
public class Test2 : IHasName
{
    public string Name { get; set; }
    public string Surname { get; set; }
}
public List<T> FillFromDB<T>()
    where T : new(), IHasName
{
   IQueryable<T> query =
      from tbl in _table
      select new T {Name=tbl.name, Surname=tbl.surname}
}

【讨论】:

  • 我认为您还必须将new() 添加到约束中。从技术上讲,您不需要class
  • 可能是 IHasName 摘要?
  • @ANKH 是的,您可以使用抽象基类而不是接口。
  • 感谢您的帮助。但是,我收到构建错误。我调用 FillFromDB()。虽然我在 verbose_mode 中得到错误,但我不知道问题所在。
  • @ANKH 很难在没有看到代码的情况下说出问题所在。也许您应该在原始问题中添加一个“更新”部分来展示更新的代码。
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多