我有以下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));
}
}
答案 0 :(得分:2)
如果t
是System.Type
的实例且T
是一种类型,则应写入:
t => t == typeof(T)
而不是:
t => t is T