我对Lambda运算符=>有一个一般的了解,但我根本不理解变量z,c和s的 properties 来自何处(如z.Name所示)。有一些我不理解的对象类型推断魔术正在发生。
public class DbReadService : IDbReadService
{
private VODContext _db;
public DbReadService(VODContext db)
{
_db = db;
}
private (IEnumerable<string> collections, IEnumerable<string> references) GetEntityNames<TEntity>() where TEntity : class
{
var dbsets = typeof(VODContext).GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(z => z.PropertyType.Name.Contains("DbSet"))
.Select(z => z.Name);
var properties = typeof(TEntity).GetProperties(BindingFlags.Public | BindingFlags.Instance);
var collections = properties.Where(l => dbsets.Contains(l.Name)).Select(s => s.Name);
var classes = properties.Where(c => dbsets.Contains(c.Name + "s")).Select(s => s.Name);
return (collections: collections, references: classes);
}
}
答案 0 :(得分:0)
LINQ函数在通用IEnumerable上运行。当您在IEnumerable上调用任何LINQ函数时,例如List.where(c => c.variable),c将是someType的实例。
在您的示例中,我假设“属性”是属性的列表或数组,因此,c是属性的实例。