문제

LINQ에서 SQL에서는 다음과 같이 할 수 있습니다.

var q = db.Colors;
if(! string.IsNullOrEmpty(colorName))
   q = q.Where(c=>c.Name.Equals(colorName));
return q.ToList();

DB4O LINQ에서는 시작해야하기 때문에 이렇게 할 수 없습니다.

var q = (from Color c in db
         select c);
if(! string.IsNullOrEmpty(colorName))
   q = q.Where(c=>c.Name.Equals(colorName));
return q.ToList();

결과가 발생합니다

  1. 모든 색상의 완전한 열거
  2. 이름으로 필터.

그것이 제가 물론 오프 코스를 목표로하는 해결책이 아닙니다. 제안이 있습니까?

도움이 되었습니까?

해결책

이런 것이 적합할까요?

return (from Color c in db
       where !String.IsNullOrEmpty(colorName) && c.Name.Equals(colorName)
       select c).ToList();

그런 다음 여러 매개 변수를 사용할 수도 있습니다.

return (from Color c in db
       where (!String.IsNullOrEmpty(colorName) && c.Name.Equals(colorName))
          || (!String.IsNullOrEmpty(color1Name) && c.Name.Equals(color1Name))
          || (!String.IsNullOrEmpty(color2Name) && c.Name.Equals(color2Name))
          ...
       select c).ToList();

다른 팁

당신이 무엇을하고 있는지 잘 모르겠습니다. 첫 번째 경우 코드 중 일부가 서버 측을 실행하여 반환 된 값을 최적화 할까 걱정하십니까? 그러나 두 번째 경우 열거는 로컬로 수행되므로 중고 값에 대한 최적화가 없습니까?

그렇다면 LINQ에서 객체를 피할 수있는 방법이 없습니다. 객체는 메모리에 있으므로 필터 작동을 수행하기 위해 열거하는 것을 피할 방법이 없습니다.

표현을 분할하면 어떻게해야합니까?

IDb4oLinqQuery<Color> q;
if(! string.IsNullOrEmpty(colorName))
{
  q = from Color c in db
      where c.Name.Equals(colorName)
      select c;
}
else
{
  q = from Color c in db
      select c;
}
return q.ToList();

이런 식으로 DB4O 사전 처리기는 2 개의 다른 LINQ 쿼리를 볼 수 있습니까? 단점은 물론 꺼져 있습니다.이 솔루션은 훨씬 더 장점이며 정확히 건조하지 않습니다 ..

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top