여러 필드 (회사 이름, 우편 번호 등)가있는 양식이있어서 사용자가 데이터베이스에서 회사를 검색 할 수 있습니다. 사용자가 둘 이상의 필드에 값을 입력하면 모든 필드를 검색해야합니다. LINQ를 사용하여 데이터베이스를 쿼리하고 있습니다.LINQ 표현식을 하나로 결합하는 방법은 무엇입니까?
지금까지 나는 입력 내용을보고 표현식 목록으로 바꾸는 함수를 작성했습니다. 이제 LINQ 공급자를 통해 실행할 수있는 단일 식으로 해당 목록을 설정하고 싶습니다.
private Expression<Func<Company, bool>> Combine(IList<Expression<Func<Company, bool>>> expressions)
{
if (expressions.Count == 0)
{
return null;
}
if (expressions.Count == 1)
{
return expressions[0];
}
Expression<Func<Company, bool>> combined = expressions[0];
expressions.Skip(1).ToList().ForEach(expr => combined = Expression.And(combined, expr));
return combined;
}
그러나이의 라인을 따라 예외 메시지와 함께 실패 다음과 같이
내 최초의 시도였다 "이진 연산자 그리고 정의되지 ...". 누구든지 이러한 표현을 결합하기 위해 내가해야 할 아이디어가 있습니까?
EDIT : 표현식과 결과를 변수에 함께 할당하는 것을 잊어 버린 선을 수정했습니다. 그 사람들을 가리켜 주셔서 감사합니다.
@ 존 Skeet :'combined'은'Expression'으로 입력됩니다; 당신은'Expression>'으로 반환하기 위해 어떤 일을해야합니다. –
jason
첫 번째 코드를 이해하기 쉽다는 점에 동의합니다. 그래서이 코드를 정답으로 만들 것입니다. 그러나 실제로 두 번째 스 니펫을 사용하려고합니다. 정확히 내가 필요로하는 것입니다. 나는 너무 복잡한 작업을하고있었습니다. Jon에게 감사드립니다. – gilles27
아이러니하게도 나는이 두 주석이 모두 쓰여졌을 때 편집을하고 있었지만 사용 된 두 번째 발췌 문장처럼 그대로 남겨 둘 것입니다. –