2017-06-05 65 views
-1

我發展與實體框架我的第一個MVC應用程序。我有一個表用戶和表RESTRICTIONS如何通過LINQ查詢中的函數進行排序?

在我的控制,我寫一個返回兩個用戶之間的共同次數限制功能:

public int common_restrictions(int id1, int id2) 
    { 
     MyModel bd = new MyModel(); 
     int count= 0; 

     var restrictions = from c in bd.RESTRICTIONS where c.ID_USER == id1 
     select c; 
     var restrictions2 = from c in bd.RESTRICTIONS where c.ID_USER == id2 
     select c; 

     foreach (var prop in restrictions) 
     { 
      var nr = restrictions2.Count(p => p.ID_PROP == prop.ID_PROP); 
      if (nr != 0) 
      { 
       count++; 
      } 
     } 
     return count; 
    } 

功能的工作,因爲它應該。 現在在同一個控制器的另一個功能,我想用戶的列表中與特定的用戶下降的他們共同的限制進行排序(比方說用戶id爲12)。我在查詢用戶的列表中,但我不知道如何把它們整理我已經試過

 var query = from u in bd.USERS orderby(common_restrictions(u.ID, 
        12)) select u; 

var query = from u in bd.USERS where u.ID != 12 
        select u; 
// sort the list?? 

後,但我得到了以下錯誤消息:

「LINQ實體無法識別方法‘的Int32 common_restrictions(的Int32,Int32)將’方法,和這種方法不能被翻譯成表達店」。

+0

問題是你的函數輸出一個整數值,所以你基本上告訴它「order by 15」,而LINQ不明白15是什麼。您需要按列名稱排序。我不知道常見的限制是什麼,因爲你沒有給任何解釋,他們的目的是什麼,所以我不能幫你 – Ortund

回答

0

如果您不想在用戶對象中包含其他屬性,則需要在兩個步驟中執行此操作。我認爲這種方式更容易。

 var query = (from u in bd.USERS where u.ID != 12 
       select u).ToList(); 
     var unSorteUsers = (from u in query 
          select new 
          { 

           User = u, 
           CR = common_restrictions(u.ID,12) 
          }); 

     var sortedUsers = (from u in unSorteUsers 

          orderby u.CR 
          select new User 
          { 

           ID = u.User.ID, 
           //All other properties. 
          }); 
+0

我仍然得到同樣的錯誤消息,當我嘗試調用common_restricions在unSorteUsers – Andreea

+0

我已經更新了我的答案。你可以試試這個嗎? – RokM

+0

仍然是一樣的錯誤。 – Andreea

相關問題