2011-02-02 68 views
1

我有下面的代碼,我需要從會員表,拉出各用戶的用戶名:使用LINQ拉MembershipUser.Username到一個新的對象

var results = (from u in db.U_USER 
       where u.Forename.ToLower().Contains(search) 
       || u.Surname.ToLower().Contains(search) 
       select new ExUser 
       { 
        MembershipId = u.MembershipId, 
        Surname = u.Surname, 
        Forename = u.Forename, 
        Username = Membership.GetUser(u.MembershipId).UserName 
       }); 

現在我知道爲什麼IM得到以下,但任何人都可以推薦解決方案嗎?

LINQ到實體無法識別方法 'System.Web.Security.MembershipUser的getUser

回答

2

LINQ到實體被想你的選擇表達轉化爲T-SQL,它可以'因爲T-SQL中沒有ExUser等。

Finhish了與到AsEnumerable或類似的呼叫的表達,然後進行投影:

var results = (from u in db.U_USER 
       where u.Forename.ToLower().Contains(search) 
       || u.Surname.ToLower().Contains(search) 
       select u) 
       .AsEnumerable() 
       .Select(u => new ExUser 
       { 
        MembershipId = u.MembershipId, 
        Surname = u.Surname, 
        Forename = u.Forename, 
        Username = Membership.GetUser(u.MembershipId).UserName 
       }); 
+0

我同意;-) +1 – 2011-02-02 12:41:00

1

可以通過使用AsEnumerable迫使結果存入存儲器做到這一點。當結果是在內存中可以調用Membership.GetUser沒有LINQ試圖將其翻譯爲SQL:

var results = (from u in db.U_USER       
       where u.Forename.ToLower().Contains(search) || u.Surname.ToLower().Contains(search) 
       ).AsEnumerable().Select(u => new ExUser { 
       MembershipId = u.MembershipId,        
       Surname = u.Surname,        
       Forename = u.Forename,        
       Username = Membership.GetUser(u.MembershipId).UserName       
       });