私は基本的にそれがこの表現をどのように拡張しますか?
p => p.fieldname.StartsWith("123")
しかし、私はこのような何かを行うには、この上で拡大するを吐き出し、一例として、コードのこのビットを持っている:ここでは
p => p.anotherentity.fieldname.StartsWith("123")
はコードのサンプルです私は自分のニーズに合わせてリファクタリングしていています:
string propertyName = "FirstName";
string methodName = "StartsWith";
string keyword = "123";
Type t = typeof (Person);
ParameterExpression paramExp = Expression.Parameter(t, "p");
// the parameter: p
MemberExpression memberExp = Expression.MakeMemberAccess(paramExp,
t.GetMember(propertyName).FirstOrDefault());
// part of the body: p.FirstName
MethodCallExpression callExp = Expression.Call(memberExp,
typeof (string).GetMethod(methodName,
new Type[] {typeof (string)}),
Expression.Constant(keyword));
// the body: p.FirstName.StartsWith("123")
Expression<Func<Person, bool>> whereExp = Expression.Lambda<Func<Person, bool>>(callExp, paramExp);
Expression<Func<Person, string>> selectExp = Expression.Lambda<Func<Person, string>>(memberExp, paramExp);
Console.WriteLine(whereExp); // p => p.FirstName.StartsWith("123")
Console.WriteLine(selectExp); // p => p.FirstName
をさらに私を聞かせて説明するために私がやりたい何を示しています。
public class Person
{
public string IdentityCode {get;set;}
public Loans Loans {get;set;}
}
public class Loans
{
public int Id {get;set;}
public Asset Assets {get;set;}
public Person person {get;set;}
}
public class Asset
{
public string SerialNumber {get;set;}
}
その後、式を使用して、このような何か構築:テストされていない
p => p.Loans.Asset.SerialNumber.StartsWith("123)
それとも
p => p.Loans.Person.IdentityCode.StartsWith("123")
ありがとう、これはまさに私が後だったものです:) – xqwzid