c# - 使用 Entity Framework 时为 Select() 创建通用选择器

标签 c# entity-framework linq select lambda

我想创建一个函数来检索给定属性名称类型的列表。但我还不知道如何创建一个有效的 lambda 选择器。

public IList<object> GetDistinctListOfProperty(string propertyName)
{
    var propInfoByName = typeof(T).GetProperty(propertyName);
    if (propInfoByName == null) return new List<object>();

    using (var db = new ApplicationDbContext())
    {
        var lambda = //TODO
        return db.Set<T>().Select(lambda).Distinct().ToList();
    }
}

最佳答案

你可以使用这个方法来生成lambda

public static Expression<Func<T, object>> LambdaGenerator<T>(string propertyName)
    {
        var arg = Expression.Parameter(typeof(T), "current");
        var property = Expression.Property(arg, propertyName);
        var conv = Expression.Convert(property, typeof(object));
        var exp = Expression.Lambda<Func<T, object>>(conv, new ParameterExpression[] { arg });
        return exp;
    }

然后使用这个方法来创建你的表达式

var lambda = LambdaGenerator<T>("Your Property Name");

关于c# - 使用 Entity Framework 时为 Select() 创建通用选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56789640/

相关文章:

c# - 为什么 Linq 无法搜索阿拉伯文本?

LINQ-to-XYZ 多态性?

c# - 在不迭代的情况下将对象集合添加到另一个对象集合

c# - 不确定如何在集合上运行Where来返回集合

c# - 实验性特征 "indexed members"是什么?

c# - 从类型名称动态创建委托(delegate)

c# - 在不同的String字典上做benchmark,普通的比较快,不知道为什么

php - Symfony2 - 保留实体而不保留其关联

c# - 如何在 LINQ 中进行外部连接?

c# - IEnumerable.Except() 如何工作?