EF를 사용하여 db를 검색하는 쿼리를 만듭니다. TdsDb는 EF 컨텍스트입니다.엔티티 프레임 워크 : 검색어에 조건부 검색 및 조건부 일치 검색
string searchValue = "Widget";
TdsDb tdsDb = new TdsDb();
IQueryable<Counterparty> counterparties;
내가 정확히 일치 할 수 있습니다
counterparties = tdsDb.Counterparties.Where(x => x.CounterpartyName == searchValue);
또는 와일드 카드 일치 :
counterparties = tdsDb.Counterparties.Where(x => x.CounterpartyName.Contains(searchValue));
을하지만
counterparties = tdsDb.Counterparties.Where(x =>
if (searchValue.EndsWith("%"))
{
if (searchValue.StartsWith("%"))
{x.CounterpartyName.Contains(searchValue)}
else
{x.CounterpartyName.StartsWith(searchValue)}
}
else
{x => x.CounterpartyName == searchValue}
);
모두 예 (psudo 코드를) 할 수 있도록하려면
이제 명확하게 if 문을 w에 넣을 수 없습니다. 그런 조항이 여기에 있습니다. 그러나 나는 또한 질의를 복제 할 수 없다 : 여기에 표시된 것은 엄청나게 무언가를 버렸다는 것이다. 프로덕션 쿼리는 훨씬 길어서 하나의 절에서만 변하는 동일한 긴 쿼리의 여러 버전을 갖는 것이 매우 건강에 좋지 않고 유지 보수가 불가능한 것처럼 보입니다.
아이디어가 있으십니까?
bool startsWithWildCard = searchValue.StartsWith("%");
bool endsWithWildCard = searchValue.EndsWith("%");
counterparties = tdsDb.Counterparties.Where(x =>
endsWithWildCard
? (startsWithWildCard
? x.CounterpartyName.Contains(searchValue)
: (x.CounterpartyName.StartsWith(searchValue)))
: (x.CounterpartyName == searchValue));
당신이 경우 시작 부분에 %
가 있거나 예상대로 끝이 작동하는 searchValue
에 의해 쿼리 BTW 테스트나요 : 당신은 삼항 연산자를 사용할 수 있어야
Ternaries, 그들은 결코 이제까지 최고의 것이지 않을 것입니까? 고맙다 Slauma, 그 작품과 옙, 나는 와일드 카드의 제거를 허용했다. 매우 유용합니다. 대단히 감사합니다. – Matt