Аналогичные:Преобразовать строку в Linq.Expressions или использовать строку в качестве селектора?
Похожий на тот:Передача выражения Linq в виде строки?
Другой вопрос с тем же ответом:Как создать динамическое выражение Linq на основе лямбда из строки в C #?
Причина для того, чтобы задать вопрос, у которого так много похожих вопросов:
Принятый ответ на подобные вопросы неприемлем, поскольку все они ссылаются на библиотеку 4-летней давности (, при условии, что она была написана мастером кода Скоттом Гу ), написанным для старой среды (.net 3.5 )., и не дает ничего, кроме ссылки в качестве ответа.
Есть способ сделать это в коде, не включая целую библиотеку.
Вот пример кода для этой ситуации:
public static void getDynamic(int startingId) where T : class
{
string classType = typeof(T).ToString();
string classTypeId = classType + "Id";
using (var repo = new Repository())
{
Build(
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(
List items,
Func value) where T : class
{
var Values = new List- ();
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;