疑难解答=> Lambda运算符C#

时间:2019-07-07 16:41:47

标签: c# linq lambda

我对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);




    }
}

1 个答案:

答案 0 :(得分:0)

LINQ函数在通用IEnumerable上运行。当您在IEnumerable上调用任何LINQ函数时,例如List.where(c => c.variable),c将是someType的实例。
在您的示例中,我假设“属性”是属性的列表或数组,因此,c是属性的实例。