#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);
}