Вы можете использовать отражение
x.GetType( ).GetProperty("MyProperty").GetValue( x, null );
, хотя это может сработать, я бы не советовал делать это, почему бы не передать выражение where в качестве выражения типа:
myMethod<T>(Expression<Func<T,bool>> where)
пример после комментария:
рассмотрим следующий тип:
вы видите три свойства, где имя имеет тип string, а id имеет тип int.теперь, если мы обернем контекст нашей базы данных в сервис, подобный этому
public class MyTypeOfXService
{
private DataDataContext Context;
public MyTypeOfXService()
{
Context = new DataDataContext("example code");
}
public IQueryable<MyTypeOfX> GetTypeOfX(Expression<Func<MyTypeOfX, bool>> where)
{
return this.Context.MyTypeOfXes.Where(where);
}
}
, в нашем методе get есть параметр Expression, который принимает два обобщенных типа, первый - это наш тип x, а второй - логическое значение.Преимущество этого подхода состоит в том, что мы можем абстрагировать все создание контекста данных и выразить только выражение where в нашем коде, см. Последний фрагмент кода:
class Program
{
static void Main(string[] args)
{
var service = new MyTypeOfXService();
var queryById = service.GetTypeOfX((mytype) => mytype.Id == 1);
var queryByName = service.GetTypeOfX((mytype) => mytype.Name == "MyName");
var queryByName = service.GetTypeOfX((mytype) => mytype.Name == "MyName" && mytype.Id == 1);
}
}
, как вы можете видеть, мы можем построить предложение whereна любую собственность или комбинацию свойств.