2009-04-14 6 views
1

으로 바꿔야합니다. 쿼리해야하는 여러 데이터 소스가 있으며 모든 쿼리를 2 개 조건 이하의 매우 간단한 식으로 제한 할 수있었습니다. 내 람 바어 식의 전형적인 복잡성의 예는 다음과 같습니다 내 비 SQL 데이터 소스에아주 간단한 Expression <Func <T, bool>>을 SQL where 절

b => b.user == "joe" && b.domain == "bloggs.com" 

나는 목록을 객체와 같은 LINQ 쿼리를 사용하도록 변환 할 수 있습니다로 확인 해요 :

public override T Get(List<T> assets, Expression<Func<T, bool>> whereClause) 
{ 
    return assets.Where(a => whereClause.Compile()(a)).FirstOrDefault(); 
} 

내 문제는 관계형 데이터베이스를 쿼리해야 할 때입니다. PostgreSQL과 MySQL에만 관심이 있습니다. 조금 어려움을 겪었습니다. 나는 Linq에게 nHibernate를 "작동 중"으로 가지고 있지만, 데이터베이스에 액세스하는 것을 멈추거나 접속을 멈추거나 연결을 닫을 수없는 문제를 가지고있다. 베타 버전에서 기대할 수있는 전형적인 것들이다. 그래서 나는 불평하지 않는다.

내 쿼리가 매우 간단하고 SQL을 직접 작성하기 때문에 제 표현식을 SQL로 바꿀 수있는 비교적 쉬운 방법이 있는지 알고 싶습니다.

나는 빠른 검색이 있었고 몇 가지 샘플을 발견했으며, 물론 이미 Linq-to-SQL 엔진이 있기 때문에 완료 할 수 있음을 알고 있습니다. 문제는 그것이 하루 또는 그 이하의 노력으로 채찍질 할 수있는 것인지 아닌지입니다. 그것이 내가 Linq-to-SQL 호환 라이브러리를 찾고로드가 제대로 작동한다고 가정하여 테스트하는 데 걸릴 것이라고 예상 할 수 있습니다. 큰 성능 고려 사항이 있으므로 ORM을 실행하는 대신 원시 SQL을 사용하는 것이 좋습니다.

+0

어디 조항 SQL 위해 LINQ 공급자를 구축하거나 람다를 변환 하시겠습니까? –

+0

난 단순한 where 절을 만들고 싶다. LINQ 공급자를 구축하고 싶지 않습니다. 저는 그것이 심각한 사업이라는 것을 알고 있습니다. – sipwiz

답변

0

LINQ 제공자를 작성하는 것은 매우 일 수 있습니다. 나는이 링크에보고 제안 : (이 소스 오픈)

Linq Provider for MySql, Postgres, Oracle 당신은 단지 당신의 람다에서 절,하자 WHERE는 SQL을 구축하려는 귀하의 의견을 바탕으로
Writing custom LINQ provider

+0

저는 DbLinq를보고 있었지만 다른 라이브러리를 연결하고 성능이나 안정성 문제에 대해 주저하는 점은 조금 있습니다. 그것은 nHibernate보다 훨씬 가볍게 보이기 때문에 약간의 시간을 투자하는 것이 가치가 있습니다. – sipwiz

+0

와우, DbLinq는 시대에 뒤진 것 같습니다. –

0

WHERE 절을보십시오. 전체 SELECt 문과 관련하여 사용 하겠지만 업데이트 및 삭제와 동일합니다.

SELECT * FROM b 
WHERE b.user == 'joe' AND b.domain == 'bloggs.com' 

당신이 볼 수 있듯이,이 절 위치를 구축하는 것은 매우 쉬운 것입니다 :

내가 그 B를 가지고 테이블의 이름입니다. 은 "=>"연산자를

  • 변화 람다에서 SQL 구문에 대한 모든 사업자를 포함한 전

    • 모든 것을 차단 : 당신은 만에이 '==' '='가된다.
    • 'AND'및 '||'에 '& &' 또는
    • 변경 아포스트로피 따라 ('->') 문자열 연산에

    당신은 그룹에 논리를 괄호를 사용할 수 있습니다 사용 LIKE 문자열에서 하위 문자열을 찾을 수의 구문 this site에서보세요... where 절.

    사용 문자열은 마법을 수행하는 대체 :

    str = str.Replace("==", "="); 
    
  • +0

    그건 내가 피하고 싶지 않은 경로이고, 실제로 그것이 내가 옮겨온 곳입니다. 내 상황에서 Linq에 대한 좋은 점은 b.LastUpdate> DateTime.Now입니다. 날짜에 ToString을 수행하는 probs는 없지만 문자열에서 DateTime.Now를 일치시키기 시작하면 지저분 해집니다. (. – sipwiz

    관련 문제