복붙노트

[SQL] SQL 여러 조건 조항에 LINQ

SQL

SQL 여러 조건 조항에 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. ==============================

    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. ==============================

    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. ==============================

    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;
    }
    
  4. from https://stackoverflow.com/questions/10323066/linq-to-sql-multiple-conditional-where-clauses by cc-by-sa and MIT license