我用
调用一个函数find_package(wr3_moveit_plugin REQUIRED)
函数是
uniqueItems = _distinctDao.GetProjectsFromDb(c.colName);
这可以按预期工作,但是我需要在示例中以 public List<string> GetProjectsFromDb(string columnName)
{
ParameterExpression parameter = Expression.Parameter(typeof(Project), "x");
var lambda = Expression.Lambda(Expression.Property(parameter, columnName), parameter);
Expression<Func<Project, string>> funcExpression = (Expression<Func<Project, string>>) lambda;
using (var mLEntities = new myLab02Entities1())
{
var cl = mLEntities.Projects.AsQueryable().Select(funcExpression).Distinct();
List<string> searchRes = cl.AsEnumerable().ToList();
return searchRes;
}
}
,Project
等查询多个数据库,例如Person
,因此我想要一个可以要求使用不同的数据库。
我知道我可以在函数调用中传递Product
来替换typeof(Project)
中的Project
,但是我如何为{{ 1}}?
答案 0 :(得分:2)
假设您的myLab02Entities1
具有要查询的所有属性(Projects
,Persons
,Products
等),可以执行以下操作:
public List<string> GetObjectsFromDb<T>(string columnName, Func<myLab02Entities1, IEnumerable<T>> entitySelector)
{
ParameterExpression parameter = Expression.Parameter(typeof(T), "x");
var lambda = Expression.Lambda(Expression.Property(parameter, columnName), parameter);
Expression<Func<T, string>> funcExpression = (Expression<Func<T, string>>) lambda;
using (var mLEntities = new myLab02Entities1())
{
var cl = entitySelector(mLEntities).AsQueryable().Select(funcExpression).Distinct();
List<string> searchRes = cl.AsEnumerable().ToList();
return searchRes;
}
}
我基本上添加了一个通用参数T
和一个名为entitySelector
的新参数,该参数返回myLab02Entities1
中的相应属性。如果需要,可以对T
施加更严格的通用约束。
用法:
GetObjectsFromDb("someColumn", x => x.Projects);
GetObjectsFromDb("someColumn", x => x.Persons);
GetObjectsFromDb("someColumn", x => x.Products);