[SQL] SQL 여러 조건 조항에 LINQ
SQLSQL 여러 조건 조항에 LINQ
다음 순간 나는 내 결과를 검색하고 있습니다 :
public List<claim> GetClaims()
{
return _db.claims.OrderBy(cl => cl.claimId).ToList();
}
하지만 지금은 절 내 목록보기에 위의 필터를 기반으로 8 조건을 추가하려합니다.
그래서으로 전환 :
public List<claim> GetFilteredClaims(string submissionId, string claimId,
string organization, string status,
string filterFromDate, string filterToDate,
string region, string approver)
{
return _db.claims.Where(cl => cl.submissionId == 5).ToList();
}
어떻게 그들이 값을 포함하는 경우에만 where 절을 추가 할 각 필터에 대한 검사를 할 수 있습니까?
해결법
-
==============================
1.그냥 어디에요 여러 번 호출하여 결과를 필터링 지킬 수없는 이유가 없다. 때문에이 모두 하나의 SQL 문에서 실행됩니다 SQL에 LINQ의 지연된 실행의 :
그냥 어디에요 여러 번 호출하여 결과를 필터링 지킬 수없는 이유가 없다. 때문에이 모두 하나의 SQL 문에서 실행됩니다 SQL에 LINQ의 지연된 실행의 :
public List<claim> GetFilteredClaims(string submissionId, string claimId, string organization, string status, string filterFromDate, string filterToDate, string region, string approver) { IQueryable<claim> filteredClaims = _db.claims; if (!string.IsNullOrWhiteSpace(submissionId)) { filteredClaims = filteredClaims.Where(claim => claim.submissionId == submissionId); } if (!string.IsNullOrWhiteSpace(claimId)) { filteredClaims = filteredClaims.Where(claim => claim.claimId == claimId); } ... return filteredClaims.ToList(); }
혹시 추가 또는 조건해야합니다 경우 PredicateBuilder을 살펴 수 있습니다.
-
==============================
2.당신이 그룹은 OR 널 상태와 각 필터 옵션을, 체인 그들과 모두 함께 AND, 그래서 같은 수 :
당신이 그룹은 OR 널 상태와 각 필터 옵션을, 체인 그들과 모두 함께 AND, 그래서 같은 수 :
public List<claim> GetFilteredClaims(string submissionId, string claimId, string organization, string status, string filterFromDate, string filterToDate, string region, string approver) { return _db.claims .Where(cl => (cl.submissionId == submissionId || submissionId == null) && (cl.claimId == claimId || claimId == null) && so on and so on... ).ToList(); }
submissionId == null이 claimId 그래서 만약 == "123", 그것은 단지 claimId에 결과를 필터링 할 것입니다. 당신은 빈 문자열 또는 무엇 이건 당신의 "가치가없는"상태는 각 널 (null)을 대체 할 수있다.
-
==============================
3.LINQKIT http://www.albahari.com/nutshell/linqkit.aspx를 살펴 보자 그것은 당신이 술어를 구축 할 수 있습니다
LINQKIT http://www.albahari.com/nutshell/linqkit.aspx를 살펴 보자 그것은 당신이 술어를 구축 할 수 있습니다
여기 내가 사용하지만 위의 문서를 읽을 수있는 코드입니다. 술어는 OR의 무리 또는 AND 또는 그 조합까지 체인을 수 있습니다.
private static IEnumerable<SurveyResult> filterData(string firstName, string lastName, List<SurveyResult> results) { var predicate = PredicateBuilder.True<SurveyResult>(); IEnumerable<SurveyResult> a; if (excludeBadData) if (firstName != string.Empty) { predicate = predicate.And(p => p.User.FirstName.ToLower().Contains(firstName.ToLower())); } if (lastName != string.Empty) { predicate = predicate.And(p => p.User.LastName.ToLower().Contains(lastName.ToLower())); } a = from r in results.AsQueryable().Where(predicate) select r; return a; }
from https://stackoverflow.com/questions/10323066/linq-to-sql-multiple-conditional-where-clauses by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL에서 지능 목록에 문자열 목록을 변환 (0) | 2020.05.27 |
---|---|
[SQL] 어떻게 중포 기지 분석 원시 데이터에 세션 및 세션 기간을 계산? (0) | 2020.05.27 |
[SQL] 스파크에서 쿼리의 실행 시간을 측정하는 방법 (0) | 2020.05.27 |
[SQL] HQL : 그것은 내부 하위 쿼리에 가입 수행 할 수 있습니까? (0) | 2020.05.27 |
[SQL] IDENT_CURRENT 대 SCOPE_IDENTITY (0) | 2020.05.27 |