类似:Convert a string to Linq.Expressions or use a string as Selector?如何将一个字符串转换为linq表达式?
类似的一个之一:Passing a Linq expression as a string?
用相同的回答另一个问题:How to create dynamic lambda based Linq expression from a string in C#?
原因,询问一些东西,有这么多的类似的问题:
接受的在这些类似的问题中回答是不可接受的,因为它们都参考了一个4年前的图书馆(假设它是由代码大师Scott Gu编写的)为旧框架(.net 3.5)编写的,并且不提供作为答案,除了链接以外,什么都不愿意。
有一种方法可以在不包含整个库的情况下在代码中执行此操作。
下面是这种情况的一些示例代码:
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;
你有没有排除了做简单的反射让你的'Func'? – 2012-07-13 23:41:11
@PaulPhillips - Reflection将产生传入的类T中属性的属性类型或名称。当连接到实体框架存储库时,类T仅作为类型的引用传递。从存储库('repo.getList()')返回所有类T的列表。反射如何帮助包含linq表达式中类T的属性? – 2012-07-13 23:45:47
您的示例使它看起来像是在执行linq-to-objects,在这种情况下,您可以反射性地获取该属性的值。但既然你在另一个环境下工作,我不确定它会起作用。我发布了我的尝试,所以你可以检查 – 2012-07-13 23:47:09