2012-03-23 74 views
1

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

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)); 
    } 
} 

回答

2

如果tSystem.TypeT一个实例是一种类型,你应该写:

t => t == typeof(T) 

相反的:

t => t is T 
相关问题