2014-04-03 21 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 。Wherehere'謂詞。 –

+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