나는 다음과 같은 많은 추악한 코드를 가지고있다 :이 LINQ 코드를 어떻게 리팩토링합니까?
if (!string.IsNullOrEmpty(ddlFileName.SelectedItem.Text))
results = results.Where(x => x.FileName.Contains(ddlFileName.SelectedValue));
if (chkFileName.Checked)
results = results.Where(x => x.FileName == null);
if (!string.IsNullOrEmpty(ddlIPAddress.SelectedItem.Text))
results = results.Where(x => x.IpAddress.Contains(ddlIPAddress.SelectedValue));
if (chkIPAddress.Checked)
results = results.Where(x => x.IpAddress == null);
...etc.
results
은 IQueryable<MyObject>
이다.
아이디어는이 무수히 많은 드롭 다운과 체크 박스 각각에 대해, 드롭 다운에 어떤 것이 선택되어 있다면, 사용자는 그 아이템과 일치하기를 원합니다. 이 확인란을 선택하면 사용자는 해당 필드가 null이거나 빈 문자열 인 레코드를 구체적으로 원합니다. (UI는 동시에 두 가지를 모두 선택할 수 없습니다.)이 모든 것이 LINQ Expression에 추가됩니다. LINQ Expression은 모든 조건을 추가 한 다음 끝에 실행됩니다.
Expression<Func<MyObject, bool>>
을 꺼내는 방법이 있어야합니다. 따라서 반복되는 부분을 메서드에 넣고 변경 내용을 전달할 수 있어야합니다. 다른 곳에서이 작업을 수행했지만이 코드 세트는 저를 방해합니다. (가능한 한 일을 안전하게 유지하고 싶기 때문에 "동적 LINQ"를 피하고 싶습니다.) 어떤 아이디어입니까?
이 SQL에 LINQ 있음을 알아 두셔야합니다 (I 질문에 말을하지 않았다, 그러나 그것은 태그 중 하나). 나는 필터링이 클라이언트 측이 아니라 데이터베이스 측에서 일어나길 원한다. –
아! 이 접근법에 -1. – loudej