猿问

使用泛型和接口的 Linq 查询

我有几个实现以下 IInactive 接口的实体框架类。


public interface IInactive

{

    bool inactive { get; set; }

}

例如我的Order类定义如下:


public class Order : IInactive

{

    [Key]

    [Required]

    public Guid orderId { get; set; }

    ...

    public bool inactive { get; set; }

我正在尝试实现一个通用方法,该方法可用于所有对象(实体),无论它们是否实现 IInactive 接口。它将被称为如下:


var query = GetAllActive<Order>();

我的这个通用方法的代码如下所示:


public IQueryable<T> GetAllActive<T>() where T : class

{

    DbSet<T> dbSet = this._db.Set<T>();


    // Does the entity implement the IInactive interface.

    // If yes, only return "active" row, otherwise return all rows

    if (typeof(T)is IInactive)

    {

        // Problem: the code in this block never executes, that is,

        // (typeof(T)is IInactive) never evaluates to true


       ...


    }


    return dbSet;

}

我非常感谢您帮助解决这个问题!谢谢。


炎炎设计
浏览 69回答 1
1回答

慕运维8079593

代替if&nbsp;(typeof(T)&nbsp;is&nbsp;IInactive)尝试if&nbsp;(typeof(IInactive).IsAssignableFrom(typeof(T)))
随时随地看视频慕课网APP
我要回答