2011-02-02 10 views
1

にMembershipUser.Usernameを引っ張るためにLINQを使用した:私は、次のコードを持っていると私は、メンバーシップ表から、各ユーザーのユーザー名を引き出すために必要な新しいオブジェクト

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 
       }); 

今私は理由イムは、以下を取得して知っていますだれでも解決策を提案できますか?メソッドを認識しないエンティティへ

LINQ 'エンティティへ

答えて

2

LINQ System.Web.Security.MembershipUser GETUSERはは、それができる、T-SQLにあなたの選択式を翻訳しようとしています' tは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 –

+0

ファンタスティック人を同意、これは仕事をしてくれた:) – Chris

1

あなたはAsEnumerableを使用してメモリに結果を強制的にそれを行うことができます。結果はあなたがLINQは、SQLにそれを翻訳しようとせずにMembership.GetUserを呼び出すことができるメモリである場合:

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       
       }); 
関連する問題