使用泛型和接口的Linq查询

时间:2019-08-21 22:25:28

标签: c# entity-framework linq generics

我有几个实体框架类,它们实现以下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;
}

非常感谢您为解决此问题提供的帮助!谢谢。

1 个答案:

答案 0 :(得分:1)

代替

if (typeof(IInactive).IsAssignableFrom(typeof(T)))

尝试

--------B------------------C------------------D-----------------E------

----inspector_1----inspector_2----inspector_3--------date 

-------Mark------------ Jhon----------- sare------------ 8/21/2019

Jhon---------------------------------------------------- 8/22/2019

sare--------------------Mark-----------------------------8/27/2019

Jho---------------------Mark------------sare-------------8/29/2019