类似:将字符串转换为 Linq.Expressions 或使用字符串作为选择器?
类似的一个:将 Linq 表达式作为字符串传递?
另一个具有相同答案的问题:如何从 C# 中的字符串创建基于动态 lambda 的 Linq 表达式?
问一个有很多类似问题的东西的原因:
这些类似问题的公认答案是不可接受的,因为它们都引用了 4 年前为旧框架 (.net 3.5) 编写的库(假定它是由代码大师 Scott Gu 编写的),除了提供链接作为答案。
有一种方法可以在不包含整个库的情况下在代码中执行此操作。
以下是针对这种情况的一些示例代码:
public static void getDynamic<T>(int startingId) where T : class
{
string classType = typeof(T).ToString();
string classTypeId = classType + "Id";
using (var repo = new Repository<T>())
{
Build<T>(
repo.getList(),
b => b.classTypeId //doesn't compile, this is the heart of the issue
//How can a string be used in this fashion to access a property in b?
)
}
}
public void Build<T>(
List<T> items,
Func<T, int> value) where T : class
{
var Values = new List<Item>();
Values = items.Select(f => new Item()
{
Id = value(f)
}).ToList();
}
public class Item
{
public int Id { get; set; }
}
请注意,这并不是要将整个字符串转换为表达式,例如
query = "x => x.id == somevalue";
而是试图只使用字符串作为访问
query = x => x.STRING;