c# - 类型 '' 不能用作泛型类型或方法 'T' 中的类型参数 ''。没有从 '' 到 '' 的隐式引用转换

标签 c# wpf linq generics

我从数据库生成了 Linq -to -Entity 模型并对其进行了修改 - 我制作了界面:

public interface IValid
{
    byte Valid{ get; set; } 
}

并使一些生成的类继承这个接口(interface)。

我编写了通用类来访问数据库中的表:

public List<T> GetValidRecords<T>() where T: class, IValid
{
    try
    {
        return _context.Set<T>().Where(x => x.Valid == 1).ToList();
    }
    catch (Exception ex)
    {
         throw new Exception(ex.Message);
    }
}

当我在单元测试中调用这个方法时

var records = repositary.GetValidRecords<tableName>();

我得到错误 -

The type 'tableName' cannot be used as type parameter 'T' in the generic type or method 'GetValidRecords()'. There is no implicit reference conversion from 'tableName' to 'IValid'.

如何解决?

编辑: 我的表类:

public partial class tableName: IValid    {
    public byte IsValid { get; set; } 
}

编辑2: 我的调用方式:

public void GetValidRecordsGenericTest()
{
    var data = new List<tableName>
    {
        new tableName() {Valid = 1},
        new tableName() {Valid = 1}
    }.AsQueryable();

    var mockSet = new Mock<DbSet<tableName>>();
    mockSet.As<IQueryable<tableName>>().Setup(m => m.Provider).Returns(data.Provider);
    mockSet.As<IQueryable<tableName>>().Setup(m => m.Expression).Returns(data.Expression);
    mockSet.As<IQueryable<tableName>>().Setup(m => m.ElementType).Returns(data.ElementType);
    mockSet.As<IQueryable<tableName>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());           var mockContext = new Mock<Entities>();
    mockContext.Setup(x => x.tableNames).Returns(mockSet.Object);

    var database = new Database(mockContext.Object);
    var records = database.GetValidRecords<tableName>(); // here I get error

    Assert.AreEqual(2, records.Count, "Wrong number of gueltig records.");
}

最佳答案

tableName 应该是这样的才能工作:

class tableName : IValid
{
    // implement IValid
}

还要确保类 tableName 实现与方法 GetValidRecords 中使用的相同的 IValid 接口(interface),即来自正确命名空间的 IValid .

关于c# - 类型 '' 不能用作泛型类型或方法 'T' 中的类型参数 ''。没有从 '' 到 '' 的隐式引用转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22611866/

相关文章:

c# - 从对话框中调用表单

c# - Awesomium 安装和支持问题

c# - 加密 App.Config 部分并部署到多台机器

.net - LINQ 和 EntityFramework : Getting first result after group by

c# - 如何将纯 XML 分配给 C# 变量

c# - 如何解析 bool 表达式并将其加载到类中?

c# - 单击彩色字符串旁边时,richtextbox 让我使用该颜色而不是黑色

c# - Web Api 异步与同步

wpf - 在 wpf datagrid mvvm 友好中选择和取消选择行

c# - 有什么方法可以在复杂类型上使用 OData $orderby 吗?