对相似的类使用相同的LINQ表达式

时间:2017-02-10 02:39:15

标签: c# linq

我的一些类具有相同名称的属性。我想使用通用函数返回这些对象的列表。属性值有这样的:

public void List<string> GetValue<T>(Expression<Func<T, string>> expression) where T : class
{
    var all = new MyEntities<T>().GetAll();
    return all.Select(expression).ToList();
}

然后我可以调用这个函数:

var allBookNames = GetValue<Book>(x => x.Name)
var allCustomerNames = GetValue<Customer>(x => x.Name)

all.Select(express).ToList()显然不起作用。我该如何解决?

更新

对不起。我是个白痴。问题是GetAll()方法返回了一个ICollection,它没有Select方法。我只需要调用As Queryable()。抱歉浪费你的时间。

我将关闭这篇文章。

1 个答案:

答案 0 :(得分:0)

不确定我是否正确理解!

我猜您正在使用Entity Framework,您可以使用存储库模式实现此目的。您需要实现一个方法,它将为提供的实体返回DbSet:

public DbSet<T> GetValue<T>()
    where T : class
{
    return context.Set<T>();
}

然后你可以打电话:

repository.GetValue<Book>().Select(p => p.Name == "John");

它将返回名为John的书籍。

请阅读MSDN上的Set<T>()