我一直在解決使用閉包時使用LINQ to Entities的問題。LINQ to Entities - 支持閉包(Lambdas)?
顯然,L2E不支持關閉。含義:
var users = from user in UserRepository.FindAll()
select new UserDTO
{
UserId = user.UserId,
Tickets = from ticket in TicketRepository.FindAll()
where ticket.User == user
select new TicketDTO
{
TicketId = ticket.TicketId
}
};
(注意:「去哪兒」 -clause是哪裏出了問題存在,我不允許,因爲它們不是EF原始類型到一個實體比較其他實體一樣的Int32唯一的東西,等的Guid ,是允許的。)
,是無效的,因爲我不能「ticket.User」比較「用戶」
這簡直是我有問題的一個例子,我意識到,我可以在比較Id,因爲這是一個原始類型,而不是閉包。
在現實中,我的情景比這更復雜,但這是我現在需要解決的情況。
我在網上找到的解決方法是使用子查詢。這樣做有效,但對我的情況來說,這不是很有效。
問:
做任何你知道:
- 實體框架4將支持在閉包在LINQ到實體?
- 這個問題比使用子查詢有更好的解決方案嗎?
- 您對此主題的任何其他知識將不勝感激!
這只是錯誤的。 L2E完全可以實現非實體POCO,即使在v1中也是如此。請參閱http://blogs.teamb。com/craigstuntz/2009/12/31/38500 /就此而言,L2S也可以做到這一點。 – 2010-02-01 22:15:55
我不想說實體框架不能投影到POCO上,但它不能處理任意位置的POCO。但再看一遍,你是對的。這個例子應該工作,因爲只使用對POCO的投影。所以問題可能是用戶實體的參考比較。 – 2010-02-02 13:21:02
此示例不起作用,因爲TicketRepository .FindAll()會帶來異常「LINQ to Entities does not recognized the method」 – Tomas 2013-12-03 15:51:21