2016-10-11 46 views
0

我試圖創建一個LINQ來獲取Users表中存在的Personnel表中的記錄。這裏是我目前正在使用的教程:Convert the Results of a LINQ Query to an Array將LINQ與模型轉換爲數組

然而,當我嘗試實施它在我的代碼我有一個錯誤:'UserModel[]' does not contain a definition for 'Contains' and the best extension method overload 'Queryable.Contains<string>(IQueryable<string>, string)' requires a receiver of type 'IQueryable<string>'

var users = from u in db.USR_MSTR select new UserModel { emp_id = u.EMP_ID }; 

UserModel[] userList = users.ToArray(); 

var matches = from p in db.PERSONNEL_MSTR 
      where userList.Contains(p.EMP_ID) //userList is generating the error above 
      select p; 

回答

2

包含正在等待的usermodel實例來傳遞,這就是爲什麼你會得到錯誤。只需使用.Any()代替:

var matches = from p in db.PERSONNEL_MSTR 
      where userList.Any(u=> u.ID == p.EMP_ID) 
      select p; 

它在這裏執行的操作是:如果在userList中找到了p.EMP_ID,那麼它將被選中。

+0

謝謝您的時間,先生,我喜歡它,它是如何的非常簡單。我也會試試這個,並會與其他答案一起檢查,看看我的整個項目更方便。 –

2

其實你在這個

userList.Contains(p.EMP_ID) 

用戶列表犯了一個錯誤是IQueryable的<的usermodel >對象,它不是一個IQueryable的<串>陣列,而另一方面p.EMP_ID是一個字符串,你爲什麼得到這個錯誤。

你需要修復它如下

List<string> userIdList = users.Select(u => u.emp_id.ToString()).ToList(); 

var matches = from p in db.PERSONNEL_MSTR 
     where userIdList.Contains(p.EMP_ID) 
     select p; 
+0

謝謝你!我已經實現了你的,但還沒有運行該程序,因爲我還在配置其他項目。一旦它成功執行,會讓標籤被接受 –

+0

如何將多個列放入'string [] userIdList'?因爲我想'var users'中的一些細節也顯示在'var matches'中。我想我應該改變這個代碼'users.Select(u => u.emp_id.ToString())。ToArray()'包括不僅僅是'emp_id',但不知道如何 –

+0

而我有一個錯誤使用匿名類型 –