1
var people = new[] {
new myUserListObject { userobj = new User { Email = "[email protected]"},Session=3 },
new myUserListObject { userobj= new User { Email = null }, Session=4}
};
var peopList = people.ToList();
var parameterExp = Expression.Parameter(typeof(myUserListObject), "type");
Expression propertyExp = Expression.Property(parameterExp, "userobj");
propertyExp = Expression.Property(propertyExp, "Email");
MethodInfo methodd = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var someValued = Expression.Constant("gmail", typeof(string));
var containsMethodExpd = Expression.Call(propertyExp, methodd, someValued);
var resxx = Expression.NotEqual(propertyExp, Expression.Constant(null, propertyExp.Type));
var togerther = Expression.And(resxx, containsMethodExpd);
var toglamb = Expression.Lambda<Func<myUserListObject, bool>>(togerther, parameterExp);
var tt = peopList.AsQueryable().Where(toglamb).ToList(); //toglamb is {type => ((type.userobj.Email != null) And type.userobj.Email.Contains("gmail"))}
동적 조건부 작성기를 사용하고 있습니다. 하지만 nullable 값 때문에 나던 작업이 포함되어 있습니다. 및 lastline throw 'System.NullReferenceException :'개체 참조가 개체의 인스턴스로 설정되지 않았습니다. '마누엘 표현식 빌더에는 목록의 null 값 때문에 작업이 포함되어 있지 않습니다.
아무도 도와주세요? 내 잘못은 어디 있니? 영어로 너무 유감스럽게 생각해서 죄송합니다.
@ marc-gravel Expression.And에 너무 감사드립니다. 내 문제를 해결했습니다. 마지막 질문을 할 수 있습니까? 어느 것이 매핑 할 || 사인? 또는 OrElse, OrAssign. – TnasuH
'||'는'OrElse'에 매핑됩니다 –
정말 고맙습니다. 좋은 하루 되세요! 행복한 코딩 :) – TnasuH