как превратить строку в выражение linq?

Аналогичные:Преобразовать строку в 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;

9
задан Community 23 May 2017 в 11:46
поделиться