2014-04-03 3 views
0

임을 컴파일 할 수 있습니다 : 통근 변수로추출 발현이 때문에이 표현을 추출하려고

t => t.DayEnd == s.DayEnd && t.DayStart == s.DayStart 

표현했다.

그리고 나는 그것을 다음 BlToolkit LINQ 쿼리에서이 변수를 사용할 수 있도록 방법으로 추출하고 싶습니다.

private void InsertOrUpdate(IQueryable<CccPricingPricedDays> source, Table<CccPricingPricedDays> target) 
    { 
     Expression<Func<CccPricingPricedDays,CccPricingPricedDays, bool>> expression = (s,t) => t.DayEnd == s.DayEnd && t.DayStart == s.DayStart; 

     //doplneni chybejicich 
     source.Where(s => !target.Any(t => t.DayEnd == s.DayEnd && t.DayStart == s.DayStart)) 
       .Insert(target, table => table); 
    } 

변수를 삽입하여 컴파일 할 수있는 방법을 찾을 수 있습니다.

+1

어떻게 표현을 사용할 계획입니까? IQueryable .Where' 술어로 사용할 수 없습니다. –

+0

정확하게 할 수있는 방법을 보여 주시겠습니까? 이걸 추출하는 방법을 모르겠다. 내 목표는 코드의 다른 부분에서 여러 번 사용할 수 있도록 매개 변수로 메소드에 술어를 보내는 것이다. –

답변

0

표현식을 Linq과 재사용하려는 경우 LinqKit을 볼 수 있습니다. 그것은 표현식 내부를 걷고 SQL 변환 전에 내용으로 모든 함수 호출을 대체합니다. 예를 들어

:

private void InsertOrUpdate(IQueryable<CccPricingPricedDays> source, Table<CccPricingPricedDays> target) 
{ 
    Expression<Func<CccPricingPricedDays,CccPricingPricedDays, bool>> expression = (s,t) => t.DayEnd == s.DayEnd && t.DayStart == s.DayStart; 

    source 
      .AsExpandable() 
      .Where(s => !target.Any(t => expression(s, t))) 
      .Insert(target, table => table); 
} 
+0

코드에서't'를 정의하지 않았습니다. – Servy