如何使用LINQ按属性类型而不是类型名称进行查询?

时间:2012-03-23 09:52:05

标签: c# .net linq

我有以下DbContext,其中标有DbSet条评论的每个// This都是我GetDbSetsByType方法的潜在目标。如何查询.Any lambda中的实际类型而不是类型名称?当我使用t => t is T时,它总是失败。我假设这是因为lambda参数声明为Type

public class CtsDbContext : DbContext
{
    public DbSet<Gender> Genders { get; set; } // This.
    public DbSet<JobLevel> JobLevels { get; set; } // This.
    public DbSet<Country> Countries { get; set; } // This.

    public IEnumerable<DbSet<T>> GetDbSetsByType<T>() where T : class
    {
        // Get one of the above DbSets based on its type.
        var tName = typeof (T).Name;
        var props = GetType().GetProperties()
            .Where(p => p.PropertyType.IsGenericType && p.PropertyType.Name.StartsWith("DbSet"))
            .Where(p => p.PropertyType.GetGenericArguments().Any(t => t.Name == tName));
        return props.Select(p => (DbSet<T>)p.GetValue(this, null));
    }
}

1 个答案:

答案 0 :(得分:2)

如果tSystem.Type的实例且T是一种类型,则应写入:

t => t == typeof(T)

而不是:

t => t is T