2010-09-16 64 views
0

這可能是相當微不足道的,但....我有一個相當複雜的LINQ查詢,我已經把IQueryable函數放在整個項目中重用。但是,當我在一個選擇中使用它時,我得到「System.Linq.IQueryable`1 [LINQPad.User.Orders] Foo(System.Guid)沒有翻譯成SQL」:(非常簡化,以顯示我已經後)Linq2Sql:在選擇中使用IQueryable

void Main() 
{ 
(from e in Clients 
select new { 
    e.CompanyName, 
    Orders = Foo(e.Id).Count() 
}).Take(20).Dump(); 
} 

IQueryable<Orders> Foo(Guid clientId) 
{ 
return Orders.Where(e => e.ClientId.Equals(clientId)); 
} 

不工作,但下列情況:

void Main() 
{ 
(from e in Clients 
select new { 
    e.CompanyName, 
    Orders = Orders.Where(f => f.ClientId.Equals(e.Id)).Count() 
}).Take(20).Dump(); 
} 

有什麼辦法,我可以重寫查詢,而無需重寫富?

回答

2

問題是,您不能只將一個函數注入到您的Linq查詢中,因爲Linq-to-SQL或Linq-to-Entities不知道如何翻譯它。 LINQPad網站上有一個good description of the problem, and a solution

另一種方法是首先將數據集放入內存中(例如,使用ToList()),但這並不能真正達到您的要求。