类似问题:将字符串转换为Linq.Expressions或使用字符串作为选择器?
一个类似的问题:如何将Linq表达式作为字符串传递?
另一个具有相同答案的问题:如何从C#中的字符串创建动态lambda基于Linq表达式?
提出这么多类似问题的原因:
那些类似问题中被接受的答案是不可接受的,因为它们都引用了一个四年前的库(尽管它是由代码大师Scott Gu编写的),而且只提供了一个链接作为答案。
在不包含整个库的情况下,有一种方法可以实现此操作。
以下是一些针对此情况的示例代码:
请注意,这并不是要将整个字符串转换为表达式,例如 。
但是它试图仅将字符串作为访问方式使用。
那些类似问题中被接受的答案是不可接受的,因为它们都引用了一个四年前的库(尽管它是由代码大师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;
repo.getList()
)返回所有类T的列表。如何使用反射在linq表达式中包含类T的属性? - Travis J