Динамическая переменная для вызова соответствующего свойства класса внутри LINQ

#c# #linq

#c# #linq

Вопрос:

Есть ли способ объединить оба метода ниже в один динамический метод, который вызывает соответствующее свойство внутри предложения LINQ where на основе пользовательского ввода? Я думал о том, чтобы сделать что-то вроде

 var prop = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(name.ToLower()));
  

затем сделайте что-то подобное внутри LINQ x => x.{prop} == name не уверен, существует ли такой синтаксис

 public void FilterByName(string name)
{
    var data = new InfoCollection().Data;
    var result = data.Where(x => x.State == name)        
    Console.WriteLine(result);
}

public void FilterByCar(string car)
{
    var data = new InfoCollection().Data;
    var result = data.Where(x=> x.Car == car) 
    Console.WriteLine(result);
}

switch(searchByString)
{
    case "name":
    FilterByName(name)
    break;

    case "car":
    FilterByCar(car)
    break;

    defualt:
    break;
}
  

Ответ №1:

попробуйте что-то вроде этого

 public void Filter(string column, string value)
{
    var data = new InfoCollection().Data;

    //get the column to filter
    PropertyInfo property = data[0].GetType().GetProperty(column);

    //filter getting dinamically the column
    var result = data.Where(x => property.GetValue(x, null) == value);

    Console.WriteLine(result);
}