我試圖創建一個顯示僱員列表的頁面。錯誤獲取會員數據返回多個項目
所有員工的認證數據存儲在.NET會員表,與像存儲在相關的表名爲Employees名稱等數據。
這裏是我的代碼,是讓員工的名單:
var viewModel = employees.OrderBy(e => e.Name).
Select(e => new EmployeeViewModel
{
EmployeeId = e.EmployeeID,
Name = e.Name,
Email = Membership.GetUser(e.UserID).Email,
Active = e.Active
});
我得到這個錯誤:
LINQ to Entities does not recognize the method 'System.Web.Security.MembershipUser GetUser(System.Object)' method, and this method cannot be translated into a store expression.
我做了一些研究,發現我需要外拉Membership.GetUser
功能的LINQ表達式。如果我只得到一名員工,這很好,但我要返回一個列表,所以用戶在每次迭代時都會有所不同。
任何人都知道我是如何解決這個問題?
或者,如果僱員表是在相同的數據庫中aspnet_Membership表,您可以創建它們之間的聯繫,讓您使用類似e.Membership.Email(你必須在創建一個用戶ID字段中輸入您Employee表及相應的GUID加載到其中,然後將會員表添加到您的.edmx文件) – Dave 2012-02-09 20:15:55
如果有N個員工,建議的Linq會導致N + 1次的數據庫查詢,不是嗎?這不會擴大到大量的員工,當然? @Dave在DB(以及模型)級別創建鏈接的建議將允許一個SQL查詢。 – 2012-02-09 20:21:34
你們都是對的。我專注於快速修復並錯過了選擇的N + 1。我已經更新了我的答案。 – nemesv 2012-02-09 20:35:10