簡體   English   中英

在EntityFramework結果上應用自定義方法

[英]Apply a custom method on EntityFramework results

有沒有辦法做這樣的事情?

using (var db = new MyEntities())
{
    // getting all users with EntityFramework 6
    var allUsers = from u in db.Users
                   select new
                   {
                       MyCustomMethod(u.FirstName)
                   };
}

當然,由於EF6無法將我的方法轉換為SQL查詢,因此會引發異常。 然后,我需要做的是在該結果上創建另一個循環並在該成員上運行我的方法,有沒有辦法不需要第二個循環?

如果您對linq方法鏈樣式沒有任何疑問,可以執行以下操作,

db.Users.AsEnumerable().Select(method);

並寫一些這樣的方法,

 public string method(User a)
 {
     return a.UserName;
 }

你可以這樣做:

var databaseUsers = from u in db.Users
                    /* add clauses to execute in the database here */
                    select new { u.FirstName };

var allUsers = from u in databaseUsers.AsEnumerable()
               select new
               {
                   MyCustomMethod(u.FirstName)
               };

.AsEnumerable()調用從本質上告訴EF,該調用之后發生的事情不應轉換為數據庫邏輯。 它不執行任何代碼。 它只是將表達式的類型從IQueriable<T>更改為IEnumerable<T>

有關更多信息,請參見AsEnumerable文檔

好吧,恐怕你做不到。

除非您可以使用EF提供的SqlFunctions之一,否則您必須構建自己的表達式樹,而且我認為,如果MyCustomMethod的作用是“將byte []反序列化為對象並對其反序列化”,那將是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM